我是一个python新手,这是我的代码从文件中的文本行中提取一些数字:
i = 0
path = '/home/vahid/git/simmobility/dev/Basic/pathset/'
output = open(path + 'noTTSectionResult.txt', 'w')
for row in open(path + 'heoutput.txt', 'r'):
if row.find('error: getTravelTimeBySegId') == -1 :
continue
words = row.split(':')
word = words[3]
word = word[1:]
word = word[:-3]
output.write(str(i) + ':' +word + '\n')
i = i+1
print i
output.close
在控制台上打印的最终输出是999(我甚至在控制台中打印结果以确保)但是写入输出文件的行数少于-754行!甚至最后一行都是部分写的! 我错过了什么吗?
感谢
答案 0 :(得分:4)
在
output.close
应该是
output.close()
否则它是无操作并且不会关闭文件。如果文件未关闭,则写入缓冲区不会在以后刷新,或者根本不刷新(取决于脚本的终止方式)。
为避免必须明确关闭文件,您可以使用with
statement:
with open(path + 'noTTSectionResult.txt', 'w') as output:
for row in open(path + 'heoutput.txt', 'r'):
...
output.write(...)
...
# no need to explicitly close `output'
即使for
循环引发异常,这也有关闭文件的附加优势。
答案 1 :(得分:1)
您需要在python文件对象上使用flush()
方法刷新输出缓冲区。
另外,如果您想确定缓冲区的所有内容是否真的写在硬盘驱动器上(或其他内容),则必须使用系统调用os.fsync()
文件对象上的'close()
方法通常会刷新缓冲区。但我认为知道它是如何工作的很好。