如何在Python中比较两个文件的修改日期?

20 投票
2 回答
27582 浏览
提问于 2025-04-17 15:17

我正在写一个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 < pytime)”时,所有的结果在输出中都显示为“FAIL”。

2 个回答

47

time.ctime() 这个函数会把时间格式化成字符串,所以你实际上是在比较两个字符串,比如 "Fri Feb 08 16:34:43 2013""Sat Sep 22 14:19:32 2012"。这样比较是不太合适的,建议直接比较 getmtime() 返回的 float 数值:

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

time.ctime 会返回一个字符串,比如说时间的描述形式。而且在比较两个时间字符串时,比如说 'Fri Feb 08 16:34:53 2013''Mon Sep 24 00:50:07 2012',前者是比后者要晚的。

撰写回答