如何根据 OS 中的修改日期自动更新文本文件中的 "last update" 日期?
How to update the "last update" date in text files automatically according their modification date in OS?
VHDL 中有几个源文件。所有文件都有一个 header,其中给出了文件名、创建日期和描述等。其中之一是最后更新日期。所有文件都在 Git.
中进行版本控制
发生的情况是文件经常被修改、提交和推送。但是,最后更新日期并不经常更新。这是错误发生的,因为在不同的时间处理了太多不同的文件,并且人们可能忘记始终将文件的“最后更新”部分 header 更改为实际更改的最新日期。
我想使这个过程自动化,并且相信有很多不同的方法可以做到这一点。
某种脚本,必须检查文本文件中的最后更新日期 header。然后,如果它与通过file-system中的文件属性可以访问的实际最后修改日期不同,则必须将文本中的最后更新日期更新为最后修改日期值。执行此操作的最佳方法是什么? Python 脚本、Bash 脚本或其他脚本?
基本上我想在文件提交到 Git 时执行此操作。理想情况下,它应该自动发生,但 运行 在终端中执行脚本的一行也许没什么大不了的。正在提交和上推的文件需要检查。
我不是 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("Last\supdate\:\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')
VHDL 中有几个源文件。所有文件都有一个 header,其中给出了文件名、创建日期和描述等。其中之一是最后更新日期。所有文件都在 Git.
中进行版本控制发生的情况是文件经常被修改、提交和推送。但是,最后更新日期并不经常更新。这是错误发生的,因为在不同的时间处理了太多不同的文件,并且人们可能忘记始终将文件的“最后更新”部分 header 更改为实际更改的最新日期。
我想使这个过程自动化,并且相信有很多不同的方法可以做到这一点。
某种脚本,必须检查文本文件中的最后更新日期 header。然后,如果它与通过file-system中的文件属性可以访问的实际最后修改日期不同,则必须将文本中的最后更新日期更新为最后修改日期值。执行此操作的最佳方法是什么? Python 脚本、Bash 脚本或其他脚本?
基本上我想在文件提交到 Git 时执行此操作。理想情况下,它应该自动发生,但 运行 在终端中执行脚本的一行也许没什么大不了的。正在提交和上推的文件需要检查。
我不是 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("Last\supdate\:\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')