Python日期修改错误的某些文件

时间:2010-09-08 19:32:40

标签: python datetime zipfile

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

2 个答案:

答案 0 :(得分:1)

听起来像夏令时问题。您是否发现一年中一半的文件已经关闭了一个小时,而另一半的文件是正确的?

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