1

ファイルの作成時間を10秒増やして変更するスクリプトを書こうとしています。Windows 7でテストしていますが、XPでも実行したいと思います。Windowsファイルのファイル作成日を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でこれを試していますが、必要に応じてPython2.7を使用できます。これはWindowsでのみ実行する必要があります。

4

1 に答える 1

1

astimezone()python2.7とpython3の実装は少し違うようです。私はそれらの両方の下であなたのコードを実行しようとしました、そしてpython3だけがを上げValueErrorます。だから、私の解決策はpython2に切り替えることです。
更新:これらの実装が異なると考えるのは私だけではありません。次の会話をご覧ください(下から2番目の投稿)。

于 2012-10-09T15:12:02.533 に答える