2014-02-14 37 views
1
outfile = open(inputfile, 'w') 
outfile.write(argument) 
outfile.flush() 
os.fsync(outfile) 
outfile.close 

这是代码片段。我正在尝试在python中写入一些文件。但是当我们打开文件时,什么都不写入。我做错了什么?无法使用python将数据写入文件

+2

你为什么要冲洗'stdout',而不是关闭文件对象? –

+0

对不起。这是一个错误 –

+1

你为什么要命名outputfile输入文件? –

回答

5

您不打电话给outfile.close方法。

没有必要在这里刷新,只是调用close正确:

outfile = open(inputfile, 'w') 
outfile.write(argument) 
outfile.close() 

或者更好的是,使用文件对象的上下文管理器:

with open(inputfile, 'w') as outfile: 
    outfile.write(argument) 

这一切都是假设是argument不一个空字符串,并且您正在查看正确的文件。如果在inputfile中使用相对路径,则使用的绝对路径取决于当前的工作目录,您可能正在查看错误的文件以查看是否写入了某些内容。

+0

脚本退出时不应该关闭(并刷新)文件吗? –

+0

@SunnyNanda:是的,当Python退出时,文件也会被关闭。虽然在这个问题中没有提到这一点。我还提到,推定是'argument'不是一个空字符串。 –

+0

@SunnyNanda:增加了另一个假设; OP正在查看正确的文件。 –

1

尝试用

outfile.close() 

注意括号。

outfile.close 

只会返回函数对象而没有做任何事情。

0

在刷新或关闭文件之前,您不会看到写入的数据。而在你的情况下,你没有正确地冲洗/关闭文件。

* flush the file and not stdout - So you should invoke it as outfile.flush() 
* close is a function. So you should invoke it as outfile.close() 

所以正确的片断将

outfile = open(inputfile, 'w') 
    outfile.write(argument) 
    outfile.flush() 
    outfile.close()