【问题标题】:How to compare the modified date of two files in python?如何比较python中两个文件的修改日期?
【发布时间】:2013-06-16 07:26:34
【问题描述】:

我正在创建一个 python 脚本,它将从文本文件(比如 File.txt)中逐行访问,然后在系统目录中搜索相应的 '.py' 和 '.txt' 文件。例如,如果从“File.txt”访问“COPY”(第一行),则会搜索“COPY.py”和“COPY.txt”。如果找到这两个文件,则将比较它们的修改日期。代码没有语法错误但是我得到了错误的输出。

我的 Python 代码是:

for line in fileinput.input(r'D:\Python_Programs\File.txt'):
    line = line[0:-1]
    sc = ''.join((line,'.py'))
    lo = ''.join((line,'.txt'))
    for root, dirs, files in os.walk(r'D:\txt and py'):
        if sc in files:
            pytime = time.ctime(os.path.getmtime(os.path.join(root, sc)))
            print(sc, '   :', pytime)
            for root, dirs, files in os.walk(root):
                if txt in files:
                    txttime = time.ctime(os.path.getmtime(os.path.join(root, txt)))
                    print(txt, '  :', txttime)
                    if (txttime > pytime):
                        print('PASS', '\n')
                    else:
                        print('FAIL', '\n')

输出:

COPY.py     : Mon Aug 27 10:50:06 2012
COPY.txt    : Mon Feb 04 11:05:31 2013
PASS        #Expected = PASS

COPY2.py    : Fri Feb 08 16:34:43 2013
COPY2.txt   : Sat Sep 22 14:19:32 2012
PASS        #Expected = FAIL

COPY3.py    : Fri Feb 08 16:34:53 2013
COPY3.txt   : Mon Sep 24 00:50:07 2012
PASS        #Expected = FAIL

我不明白为什么“COPY2”和“COPY3”给出“PASS”。可能是我做错了。 以及在代码中将比较更改为 "if (txttime 。 所有结果在输出中都显示为“FAIL”。

【问题讨论】:

  • 不使用原始字符串作为 Windows 路径,而只使用正斜杠 - 它可以正常工作(并且也可以在其他平台上工作)。
  • 这里可以使用os.stat(filename).st_mtime,返回上次修改时间。

标签: python


【解决方案1】:

time.ctime() 将时间格式化为字符串,因此您在文本上比较字符串 "Fri Feb 08 16:34:43 2013""Sat Sep 22 14:19:32 2012"。只是不要那样做,并比较getmtime()直接给你的floats:

pytime = os.path.getmtime(os.path.join(root, sc))
# ...
txttime = os.path.getmtime(os.path.join(root, txt))
# ...
if (txttime > pytime):
    # ...

【讨论】:

  • 谢谢它现在工作正常。我的问题已解决,但我的代码如何通过比较字符串始终给出“通过”。是ASCII值比较吗?
  • @AshA 是的。它本质上是比较字符串Fri… 是否会在字符串Sat… 之前出现在字典中,这是因为FS 之前出现。
  • @millimoose 是的,但很快就可以看到有一个公认的答案。 (顺便说一句,谢谢。)
  • @zezollo - 我的意思是,如果它在三年内不被接受,它就不会被用户接受,因为所有意图和目的都消失了。虽然我很欣赏这种情绪,但它有点垃圾。
【解决方案2】:

time.ctime 返回一个字符串,'Fri Feb 08 16:34:53 2013' < 'Mon Sep 24 00:50:07 2012'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多