用Python编写后更改文件的修改日期

2024-10-03 17:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图更改Windows中的“datemodified”字段值时,python遇到了一个奇怪的问题。具体地说,如果我写入文件,然后尝试更改其Date Modified属性,更改将失败(修改的日期将成为我运行python脚本的时间)。但是,如果我不写文件(如果我注释掉输出.写入函数调用)日期修改时间正确设置为11/2017。在

在这两种情况下,日期访问时间都按预期设置。在

下面是我的代码(Python2.7):

import os
import time
import datetime

out = open("out.test", "wb")
#comment out the write line to get this to work
out.write("hi")
out.flush()
out.close

fileLocation = "out.test"
year = 2017
month = 11
day = 5
hour = 19
minute = 50
second = 0

date = datetime.datetime(year=year, month=month, day=day, hour=hour, minute=minute, second=second)
modTime = time.mktime(date.timetuple())

os.utime(fileLocation, (modTime, modTime))

有趣的是,如果我使用一个单独的python进程(即在另一个cmd提示符下运行python)来更改修改日期,那么也可以。在

如果我写入文件,是否需要调用其他类似flush的函数来正确设置修改日期的时间?在

提前谢谢。在


Tags: 文件testimportdatetimetimeos时间out
1条回答
网友
1楼 · 发布于 2024-10-03 17:18:30

问题在于这条故障线路:

out.close

这个不会关闭文件(它没有任何用处,只是读取函数的引用,而不是调用它)。通常不是什么大问题,因为python在退出时关闭文件,但不是在这里。在

当进程终止/文件句柄被垃圾回收时,对文件调用一个隐式close,它将修改日期设置为当前时间。在

因此utime更改文件打开时的时间,但文件随后关闭,修改时间重置:似乎没有效果。在

(有人在这里提出并回答了一个类似的问题:system vs call vs popen in Python

解决办法当然是:

^{pr2}$

请注意,写入或不写入文件时有细微差别。如果不写入文件,则隐式close调用可能不必更新文件时间,这说明它是有效的。在

最后一点建议:使用上下文管理器来避免类似的问题。您不必经常打电话给close

with open("out.test", "w") as out:
    out.write("hi")
    out.flush()

# file is closed when exiting "with" block

相关问题 更多 >