Python在程序退出时修改关闭的文件

时间:2018-08-24 01:16:22

标签: python

我正在尝试修改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

1 个答案:

答案 0 :(得分:2)

这里的问题是您忘记了关闭文件。

logfile.close 

要关闭文件

logfile.close()

即使第一个代码片段不是您想要的,它也不会产生错误,因为它仍然是有效的语法。函数就像任何变量一样。换句话说,函数是一流的对象。这里有一个有趣的讨论:What are "first class" objects?

因此,在代码中的任何位置,如果添加了要调用的函数名称而未添加括号,则python解释器将认为您希望创建一个表达式并继续进行而不会产生错误。