【问题标题】:How to update the "last update" date in text files automatically according their modification date in OS?如何根据操作系统中的修改日期自动更新文本文件中的“最后更新”日期?
【发布时间】:2021-01-15 15:33:32
【问题描述】:

VHDL 中有几个源文件。所有文件都有一个标题,其中包含文件名、创建日期和描述等。其中之一是最后更新日期。所有文件都在 Git 中进行版本控制。

发生的情况是文件经常被修改、提交和推送。但是,最后更新日期不会经常更新。这是错误的,因为在不同的时间处理了许多不同的文件,并且可能忘记始终将文件标题的“最后更新”部分更改为实际更改的最新日期。

我想自动化这个过程,并相信有很多不同的方法可以做到这一点。

某种脚本,必须检查文本文件头中的最后更新日期。然后,如果它与可以通过文件系统中的文件属性访问的实际上次修改日期不同,则必须将文本中的上次更新日期更新为上次修改日期值。做到这一点的最佳方法是什么? Python 脚本、Bash 脚本或其他什么?

基本上我想在将文件提交到 Git 时执行此操作。理想情况下它应该自动发生,但在终端中运行一行来执行脚本也许没什么大不了的。需要对正在提交和推送的文件进行检查。

【问题讨论】:

  • 您能否提供一个带有标题日期时间信息的测试文件。您在 Windows 机器上吗?我会使用 Python 或 Windows Autoit。
  • 第 9 行通常会这样写“-- Last update: 2020-09-28”
  • 一个 Autoit 脚本(仅在 Windows 上运行)就可以了,还是必须是 Python?
  • 脚本是否应该查找文件夹中的所有 .vhdl 文件并进行检查/更新?
  • 当然这是可能的。如果你愿意,我可以给你一个用 Autoit 编写的帮助启动的小脚本。

标签: automation scripting


【解决方案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("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')
    

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多