gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:39:57 27 4
gpt4 key购买 nike

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

最佳答案

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

logfile.close 

要关闭文件,您需要执行的操作

logfile.close()

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

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

关于Python 在程序退出时修改关闭的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com