文件未在python中发布

2024-06-17 13:34:54 发布

您现在位置: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

我做错什么了?你知道吗


Tags: 文件代码logmessageforsizeobjectsos
2条回答

不知道写模式有什么问题,但可以使用“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上看到

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

log.close()

否则Python会在脚本结束时自动关闭文件,这就是为什么ls -lcat命令会显示文件的大小和内容。你知道吗

您也可以将file对象用作context manager, using the ^{} 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

相关问题 更多 >