Python 某些文件修改日期错误

2 投票
2 回答
1979 浏览
提问于 2025-04-16 03:52

我在使用Python处理一些文件和它们的时间戳时遇到了问题。我有一堆文件在一个文件夹里,这些文件是从外部来源得到的。并不是所有的文件都有问题,但有些文件在Python中显示的时间比在资源管理器或命令提示符下显示的时间少了一个小时。我特别在使用zipfile模块时遇到这个问题,压缩文件后,“修改日期”的时间戳被更改为Python所理解的时间,具体情况如下。

命令提示符 - 压缩前

C:\forms>dir /T:W "C:\forms\7aihy56.fmx"
02/02/2007  12:50 PM           195,148 7aihy56.fmx
               1 File(s)        195,148 bytes
               0 Dir(s)  985,520,533,504 bytes free

Python - 获取修改时间和创建时间

>>>import os
>>>st = os.stat("C:\\forms\\7aihy56.fmx")
>>>print(time.asctime(time.localtime(st[8])))
>>>print(time.asctime(time.localtime(st[9])))
Fri Feb 02 11:50:24 2007
Fri Feb 02 11:50:24 2007

使用Python zipfile模块压缩后查看zip文件内容

>>>import datetime
>>>import zipfile
>>>zf = zipfile.ZipFile("C:\\daily_forms_auto_backup.zip")
>>>for info in zf.infolist():
>>> print(info.filename)
>>> print('\tModified:\t', datetime.datetime(*info.date_time))
>>> print
forms/7aihy56.fmx
    Modified:    2007-02-02 11:50:24

命令提示符 - 从zip文件解压后

C:\forms>dir /T:W "C:\forms\7aihy56.fmx"
02/02/2007  11:50 AM           195,148 7aihy56.fmx
               1 File(s)        195,148 bytes
               0 Dir(s)  984,923,164,672 bytes free

2 个回答

1

听起来像是夏令时的问题。你有没有发现,一年中的某一半时间里的文件时间比实际时间少了一个小时,而另一半时间里的文件时间又是正确的?

1

感谢你的帮助,"Ned Batchelder",非常感谢。

这是我找到的最接近我问题的答案,按照Python开发者的说法,这种情况是正常且可以接受的。你可以看看这个讨论串 http://bytes.com/topic/python/answers/655606-python-2-5-1-broken-os-stat-module。不过在这个讨论中,他们特别提到了os.stat模块。他们基本上是在说,时间差是因为Windows和Python在计算夏令时(DST)时的方式不同,而Windows和Python的计算都是正确的。

为了处理我的问题,我后来使用了tarfile模块,先把所有文件打包成tar文件,然后再用zipfile模块来压缩这个tar文件。tarfile模块能够正确保留文件的时间戳。我还发现zipfile模块的另一个问题是,当你提取一个文件时,它会把“修改日期”更新为当前的日期和时间,而不是保留被提取文件的原始日期和时间。

撰写回答