写入操作部分完成

2024-04-20 00:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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行!即使最后一行也写了一部分!!! 我错过什么了吗?你知道吗

谢谢


Tags: path代码文本gittxthomeoutput数字
2条回答

您需要用python文件对象上的flush()方法刷新输出缓冲区。你知道吗

另外,如果您想确定缓冲区的所有内容都是真的写在硬盘上的(或者其他什么),您必须使用系统调用os.fsync()

file对象上的'close()方法通常会刷新缓冲区。但我觉得知道它是怎么工作的很好。你知道吗

那个

output.close

应该是

output.close()

否则这是一个不操作,不关闭文件。如果文件没有关闭,写入缓冲区直到稍后才会刷新,或者根本不会刷新(取决于脚本终止的方式)。你知道吗

为了避免显式关闭文件,可以使用^{} 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循环引发异常,也可以关闭文件。你知道吗

相关问题 更多 >