我有一个python脚本,它应该循环遍历目录中的所有文件,并将每个文件的日期设置为当前时间。它似乎没有任何效果,即文件资源管理器中的Date列显示没有变化。我看到代码循环遍历所有文件,只是看起来对utime
的调用没有效果。
问题是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
答案 0 :(得分:3)
您有三个问题:
touch
时使用的是文件名,而不是完整路径,因此所有touch
都发生在工作目录中os.utime
opens the files with no sharing allowed,它与现有的打开文件句柄不兼容要修复#3,请将touch
方法更改为:
def touch(fname, times=None):
# Open and immediately close file to force existence
with open(fname, 'ab') as f:
pass
# Only alter times when file is closed
os.utime(fname, times)
要修复#1和#2,请将主要方法更改为touch
,如下所示:
touch(os.path.join(root, file))
使用原始名称并将其与正在遍历的根目录连接,其中touch(filename)
在程序的工作目录中触摸没有扩展名的文件(因为您使用了非限定名称)。如果您发现程序的工作目录(print os.getcmd()
将告诉您在哪里查看),您会发现一堆随机空文件对应于您正在遍历的树中找到的文件,剥离了路径和文件扩展名。
旁注:如果你可以转到Python 3(已经有一段时间了,并且有很多改进),你可以做一个更安全(无竞赛)和更快{{1}感谢touch
中的文件描述符支持:
os.utime
并非所有系统都支持文件描述符,因此如果您需要处理此类系统,请根据file descriptor support via os.supports_fd
的测试定义def touch(fname, times=None):
with open(fname, 'ab') as f:
os.utime(f.fileno(), times)
。
答案 1 :(得分:0)
os.utime可以在Windows上运行,但可能你在浏览器中查看错误的日期。 os.utime不会修改创建日期(它看起来像是在资源管理器中的日期字段中使用的日期)。它会更新“修改日期”字段。如果右键单击类别栏并选中“修改日期”框,则可以看到此信息。或者,启动命令行并输入“dir”。那里显示的日期应反映出变化。
我在python 2.7上测试了os.utime,你必须提供两个参数:
date("z")+1;
在Python 3上,第二个参数默认为None:
detail::tmat4x4<T> glm::gtc::quaternion::mat4_cast ( detail::tquat< T > const & x )