#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, но я сделал небольшой скрипт, который, надеюсь, поможет вам. Возможно, это соответствует вашим потребностям.
Что должен делать скрипт:
-
Получить все файлы из пути (здесь c:Python ), которые имеют расширение .vdhl
-
Перебирайте файлы и извлекайте дату из строки 9 с помощью регулярного выражения
-
Получить дату последнего изменения из файла
-
Если последнее изменение> затем дата в файле, затем обновите файл
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')