我有一个简单的代码块,可以打开一个文件,然后在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
我在这里做错了什么?
答案 0 :(得分:6)
您忘记调用 file.close
方法;添加()
不仅可以引用该方法,还可以实际调用它:
log.close()
Python会在脚本结束后立即自动关闭文件,这就是ls -l
和cat
命令显示大小和文件内容的原因。
您也可以将文件对象用作context manager, using the with
statement;只要with
块结束,文件就会为您关闭:
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
答案 1 :(得分:0)
不知道写模式有什么问题,但可以使用'r +'来完成。
import os
objects = { 'dave' : 'builder' , 'fred' : 'cobbler' , 'frank' : 'shoplifter' }
log = open('jam.txt', 'r+')
for bloke in objects:
log.write("%s is a %s \n" % (bloke, objects[bloke]))
log.close()
print os.stat('jam.txt').st_size
可以看到其他模式