写操作部分完成

时间:2014-05-28 08:49:11

标签: python python-idle

我是一个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行!甚至最后一行都是部分写的! 我错过了什么吗?

感谢

2 个答案:

答案 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()方法通常会刷新缓冲区。但我认为知道它是如何工作的很好。