2

Python 3.1.2
Windows XP SP3

我在 python 中遇到了一些文件及其时间戳的问题。我从外部来源收到的目录中有一堆文件。这不是我遇到问题的每个文件,但对于某些文件,python 与 XP 中的 explorer 或 cmd 显示的内容相差一个小时。我在使用 zipfile 模块时特别看到了这个问题,在该模块中,文件被压缩后,“修改日期”时间戳被更改为 python 解释它的内容,如下所示。

CMD - 压缩前

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 - 获取 mtime ctime

>>>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

CMD - 从 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
4

2 回答 2

1

听起来像夏令时问题。你有没有发现半年的文件有一个小时关闭,而另一半的文件是正确的?

于 2010-09-08T19:45:10.833 回答
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 压缩我的 tarfile。tarfile 模块正确地保留文件时间戳。我在 zipfile 模块中发现的另一个问题是,在提取文件时,它会将“修改日期”时间更新为当前日期和时间,而不是保留正在提取的文件的原始日期和时间。

于 2010-09-09T21:32:13.950 回答