我有一個Python腳本應該循環遍歷目錄中的所有文件,並將每個文件的日期設置爲當前時間。它似乎沒有效果,即文件資源管理器中的日期列顯示沒有變化。我看到代碼循環遍歷所有文件,看起來對utime
的調用沒有效果。utime()在Windows中沒有效果
問題是not this,因爲大多數日期都是幾個月大。
# set file access time to current time
#!/usr/bin/python
import os
import math
import datetime
def convertSize(size):
if (size == 0):
return '0B'
size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
i = int(math.floor(math.log(size,1024)))
p = math.pow(1024,i)
s = round(size/p,2)
return '%s %s' % (s,size_name[i])
# see www.tutorialspoint.com/python/os_utime.htm
def touch(fname, times=None):
fhandle = open(fname, 'a')
try:
os.utime(fname, times)
finally:
fhandle.close()
def main():
print ("*** Touch Files ***");
aml_root_directory_string = "C:\\Documents"
file_count = 0
file_size = 0
# traverse root directory, and list directories as dirs and files as files
for root, dirs, files in os.walk(aml_root_directory_string):
path = root.split('/')
#print((len(path) - 1) * '---', os.path.basename(root))
for file in files:
filename, file_extension = os.path.splitext(file)
print(len(path) * '---', file)
touch(filename,)
#
print ("\n*** Total files: " + str(file_count) + " Total file size: " + convertSize(file_size) + " ***");
print ("*** Done: Time: " + str(datetime.datetime.now()) + " - Touch Files ***");
# main ###############################################################################
if __name__ == "__main__":
# stuff only to run when not called via 'import' here
main()
編輯:
在任何情況下,在未來讀取此,同樣重要的是要注意的文件瀏覽器可以display more than 1 kind of date
爲什麼在'touch()'中打開()'文件?你不需要這麼做 –
感謝您的回覆。也許這不是必需的。我刪除了除utime之外的所有內容,行爲也沒有什麼不同。 –
@Chris_Rands:需要像* NIX命令行'touch'那樣操作,如果該文件不存在,則創建該文件。如果沒有它,它會像一個輕微破壞的'touch -c'(它不會創建不存在的文件,事實上,當'os.utime'找不到該文件時引發異常)。 – ShadowRanger