我有一个简单的代码块,它打开一个文件,然后在运行 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
