2011-05-12 66 views
12

我对Python相当陌生,所以希望我在这里错过了一些明显的东西,但它让我难以置信。我的程序片段如下:.write不能在Python中工作

outFile = open('P4Output.txt', 'w') 
outFile.write(output) 
print output 
print "Output saved to \"P4Output.txt\"\n" 

输出打印正确的控制台,但如果我打开文件它是空白的。如果我删除该文件并再次执行我的程序,则会创建该文件,但仍为空。我在之前的另一个程序中使用了完全相同的代码块,它工作并仍然有效。然而,如果我打开Python并尝试一些简单的东西,例如:

f = open('test.txt', 'w') 
f.write("test") 

再次,test.txt被创建,但留空。是什么赋予了?

+0

打印输出时返回什么?你测试了outFile.write('test')吗? – garnertb 2011-05-12 01:06:44

回答

30

你在程序结束时做了f.close()吗?

+0

oops ...添加关闭()并且正常工作 – Danny 2011-05-12 01:31:25

+2

当解释器退出时,文件不是'.close()'自己吗? – dcrosta 2011-05-12 01:39:57

+1

当Python存在时文件关闭,但文件输出通常被缓冲,如果没有换行符,则挂起的输出不会被刷新到文件系统。 – poke 2016-09-12 14:14:50

32

由于缓冲,字符串可能实际上不会显示在文件中,直到您拨打flush()close()。因此,请在f.write()之后拨打f.close()。建议使用带有文件对象的with,即使由于例外情况或return声明而提早跳出with块,它也会自动关闭文件。

with open('P4Output.txt', 'w') as f: 
    f.write(output) 
2

尽量附上语句在try/catch块知道是否打开或写入文件时发生什么事:

try: 
    outFile = open('P4Output.txt','w') 
    outFile.write(output) 
    outFile.close() 
except IOError as (errno,strerror): 
    print "I/O error({0}): {1}".format(errno, strerror) 

并始终关闭您的文件,以便系统能刷新数据在关闭之前将文件添加到文件

8

,如果你想缓冲的内容写入到磁盘你需要做一个

outFile.flush() 

。 如果您已完成写入文件,则file.close调用将在关闭文件之前隐式刷新缓冲的数据。

-1

也许你应该使用绝对路径而不是相对路径。