Skip to main content
 首页 » 编程设计

python之文件未在 python 中发布

2025年05月04日15duanxz

我有一个简单的代码块,它打开一个文件,然后在运行 for 循环后关闭该文件。

但是它似乎并没有释放文件,因为循环和关闭下面的下面一行

print os.stat('/root/message').st_size 

显示为 0。如果我执行 ls -l,它会显示文件大小,我可以 cat 文件,它具有正确的内容。

这是代码块。

#!/usr/bin/python 
import os 
objects = { 'dave' : 'builder' , 'fred' : 'cobbler' , 'frank' : 'shoplifter' } 
log = open('/root/jam' , 'w') 
for bloke in objects: 
        log.write("%s is a %s \n" % (bloke, objects[bloke]))  
log.close 
print os.stat('/root/jam').st_size 

我在这里做错了什么?

请您参考如下方法:

您忘记调用 file.close 方法;添加 () 不仅引用该方法而且实际调用它:

log.close() 

Python 否则会在脚本结束时自动关闭文件,这就是 ls -l 和 cat 命令显示大小和文件内容的原因.

您还可以将文件对象用作 context manager, using the with statement ;一旦 with block 结束,文件将为您关闭:

import os 
 
objects = { 'dave' : 'builder' , 'fred' : 'cobbler' , 'frank' : 'shoplifter' } 
 
with open('/root/jam' , 'w') as log: 
    for bloke in objects: 
        log.write("%s is a %s \n" % (bloke, objects[bloke])) 
 
# with block ends, file is closed for you 
 
print os.stat('/root/jam').st_size