我正在尝试修改python中使用的文件的时间戳。
在运行脚本之前,我有以下内容:
jlinkels@donald-pc:/tmp$ echo "Hello World" /tmp/filter_cc.log
jlinkels@donald-pc:/tmp$ stat filter_cc.log
Access: 2018-08-24 00:56:05.942539951 +0000
Modify: 2018-08-24 00:56:05.942539951 +0000
Change: 2018-08-24 00:56:05.942539951 +0000
很好。然后运行以下Python脚本:
#! /usr/bin/python
import os, sys
os.utime ("/tmp/filter_cc.log", (1394628000.0,1394628000.0))
sys.exit()
退出脚本后,我再次运行stat:
jlinkels@donald-pc:/tmp$ stat filter_cc.log
Access: 2018-08-24 00:58:10.441487778 +0000
Modify: 2014-03-12 12:40:00.000000000 +0000
Change: 2018-08-24 00:58:09.941491078 +0000
没关系。 os.utime语句中的时间戳记是2014年的日期。
现在是问题所在:当我在Python脚本中访问文件时,在os.utime语句之后对其进行了修改。大概在出口。在运行脚本之前,我删除了先前的文件。 这是脚本:
#! /usr/bin/python
import os, sys
logfile = open ('/tmp/filter_cc.log', 'w')
logfile.write ("Hello world\n")
logfile.close
os.utime ("/tmp/filter_cc.log", (1394628000.0,1394628000.0))
sys.exit()
因此,我希望os.utime调用会将文件时间设置为2014。就像第一个脚本一样。但是,会发生这种情况:
jlinkels@donald-pc:/tmp$ stat filter_cc.log
Access: 2018-08-24 01:03:36.042778408 +0000
Modify: 2018-08-24 01:03:35.542783334 +0000
Change: 2018-08-24 01:03:35.542783334 +0000
那绝对不是很好。最后一个语句是脚本是os.utime。但是似乎Python在操作系统级别再次修改了关闭的文件。
我应该怎么做才能关闭文件,以便os.utime可以在同一脚本中修改文件时间?
运行Debian Jessie,Python 2.7.9
答案 0 :(得分:2)
这里的问题是您忘记了关闭文件。
logfile.close
要关闭文件
logfile.close()
即使第一个代码片段不是您想要的,它也不会产生错误,因为它仍然是有效的语法。函数就像任何变量一样。换句话说,函数是一流的对象。这里有一个有趣的讨论:What are "first class" objects?
因此,在代码中的任何位置,如果添加了要调用的函数名称而未添加括号,则python解释器将认为您希望创建一个表达式并继续进行而不会产生错误。