文件没有在python中发布

时间:2014-11-10 11:20:19

标签: python

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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:6)

您忘记调用 file.close方法;添加()不仅可以引用该方法,还可以实际调用它:

log.close()

Python会在脚本结束后立即自动关闭文件,这就是ls -lcat命令显示大小和文件内容的原因。

您也可以将文件对象用作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

http://www.tutorialspoint.com/python/python_files_io.htm

可以看到其他模式