Как автоматически обновлять дату «последнего обновления» в текстовых файлах в соответствии с датой их изменения в ОС?

#automation #scripting

#автоматизация #сценарии

Вопрос:

В VHDL есть несколько исходных файлов. Все файлы имеют заголовок, в котором, помимо прочего, указывается имя файла, дата создания и описание. Одной из таких вещей является дата последнего обновления. Все файлы контролируются версиями в Git.

Что происходит, так это то, что часто файлы изменяются, фиксируются и перемещаются вверх. Однако дата последнего обновления обновляется не часто. Это происходит по ошибке, поскольку в разное время обрабатывается очень много разных файлов, и можно забыть всегда менять часть заголовка файла «последнее обновление» на самую последнюю дату, когда она действительно была изменена.

Я хочу автоматизировать этот процесс и считаю, что есть много разных способов сделать это.

Какой-то скрипт должен проверять дату последнего обновления в заголовке текстового файла. Затем, если она отличается от фактической даты последнего изменения, доступ к которой можно получить через свойства файла в файловой системе, дата последнего обновления в тексте должна быть обновлена до значения даты последнего изменения. Каков наиболее оптимальный способ сделать это? Скрипт Python, скрипт Bash или что-то еще?

В основном я хочу сделать это, когда файлы передаются в Git. В идеале это должно происходить автоматически, но запуск одной строки в терминале для выполнения скрипта, возможно, не имеет большого значения. Проверка требуется для файлов, которые передаются и перемещаются вверх.

Комментарии:

1. Не могли бы вы предоставить тестовый файл с информацией о дате и времени заголовка, пожалуйста. Вы используете компьютер с Windows? Я бы использовал Python или Windows Autoit.

2. Строка 9 обычно гласит: «— Последнее обновление: 2020-09-28»

3. Сценарий Autoit (работает только в Windows) будет в порядке или он должен быть Python?

4. Должен ли скрипт искать все файлы .vhdl в папке и выполнять проверку / обновление?

5. Конечно, это возможно. Если хотите, я могу дать вам небольшую подсказку для запуска скрипта wirtten в Autoit.

Ответ №1:

Я не программист на Python, но я сделал небольшой скрипт, который, надеюсь, поможет вам. Возможно, это соответствует вашим потребностям.

Что должен делать скрипт:

  1. Получить все файлы из пути (здесь c:Python ), которые имеют расширение .vdhl

  2. Перебирайте файлы и извлекайте дату из строки 9 с помощью регулярного выражения

  3. Получить дату последнего изменения из файла

  4. Если последнее изменение> затем дата в файле, затем обновите файл

     import os
    import re
    import glob
    import datetime
    
    path = r"c:Python"
    mylist = [f for f in glob.glob("*.vhdl")]
    print(mylist)
    
    for i in mylist:
        filepath = os.path.join(path, i)
        with open(filepath, 'r ') as f:
            content = f.read()
            last_update = re.findall("Lastsupdate:s (d{4}-d{2}-d{2})", content)
            modified = os.path.getmtime(filepath)
            modified_readable = str(datetime.datetime.fromtimestamp(modified))[:10]
            #print(content)
            #print(last_update)
            #print(modified_readable)
            #print("Date modified:", datetime.datetime.fromtimestamp(modified))
            if (modified_readable > last_update[0]):
                print(filepath, 'UPDATE')
                text = re.sub(last_update[0], modified_readable, content)
                f.seek(0)
                f.write(text)
                f.truncate()
            else:
                print(filepath, 'NO CHANGE')