我正在尝试编写一个脚本,通过将文件的创建时间增加10秒来更改文件的创建时间。我在Windows 7上测试它,但也想在XP中运行它。我尝试使用以下代码跟踪How do I change the file creation date of a Windows file from Python?中的解决方案:
import os
import pywintypes, win32file, win32con
def changeFileCreationTime(fname, newtime):
wintime = pywintypes.Time(newtime)
winfile = win32file.CreateFile(
fname, win32con.GENERIC_WRITE,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None, win32con.OPEN_EXISTING,
win32con.FILE_ATTRIBUTE_NORMAL, None)
win32file.SetFileTime(winfile, wintime, None, None)
winfile.close()
for (path, dirs, files) in os.walk('C:/Personal/fc/Images/Corvette'):
for file in files:
print(os.path.join(path, file))
print(os.stat(os.path.join(path, file)))
changeFileCreationTime(os.path.join(path, file),os.stat(os.path.join(path, file)).st_ctime+10)
print(os.stat(os.path.join(path, file)))
但是我收到了错误:
Traceback (most recent call last):
File "C:\Python31\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 326, in RunScript
exec(codeObject, __main__.__dict__)
File "C:\Users\hermamr1\Desktop\Script1.py", line 20, in <module>
changeFileCreationTime(os.path.join(path, file),os.stat(os.path.join(path, file)).st_ctime+10)
File "C:\Users\hermamr1\Desktop\Script1.py", line 11, in changeFileCreationTime
win32file.SetFileTime(winfile, wintime, None, None)
ValueError: astimezone() cannot be applied to a naive datetime
我在Python 3.1.3上尝试这个,但如果需要我可以使用Python 2.7。我只需要在Windows上运行它。
答案 0 :(得分:1)
似乎python2.7和python3中astimezone()
的实现略有不同。我试图在它们下运行你的代码,只有python3引发ValueError
。所以,我的解决方案是切换到python2
更新:我不是唯一一个认为这些实现不同的人,你可以看看following conversation(从底部开始的第二篇文章)。