如何根据 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 程序员,但我编写了一个小脚本希望对您有所帮助。也许这符合您的需求。

脚本应该做什么:

  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("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')