【问题标题】:How to flush to a file in python?如何刷新到python中的文件?
【发布时间】:2013-02-18 02:51:18
【问题描述】:

我有这个 sn-p 并且发生了一件奇怪的事情:

out = open("./out.txt","w+")
for line in open("./int.txt","r").readlines():
    for key in dic.keys():
        if line.count(key) > 0:
            line = re.sub(key,dic[key],line)
    print line
    out.write(line)

python shell 的输出是正确的,它包含根据dic{} 切换后的所有行,而out 文件只包含大约一半的行?

【问题讨论】:

  • 请发布您的输入文件或其中的一部分,以便我们了解您的意思。

标签: python python-2.7 io


【解决方案1】:

我建议使用the with statement 来管理输出文件句柄的上下文,以便它在作用域的末尾关闭(这样当您查看它时,它是最新的)。 for 循环使用您的输入文件为您执行此操作。

with open("./out.txt", "w+") as out:
    for line in open("./int.txt", "r"):
        for key in dic.keys():
            if key in line:
                line = re.sub(key, dic[key], line)
        print line,
        out.write(line)

其他一些小改动:

  • .readlines() 不是必需的
  • if key in line: 将在找到第一个实例后停止在line 中搜索key,从而提高效率。
  • print line, 不会在line 之后添加另一个换行符。

还要考虑line = line.replace(key, dic[key]) 是否足够,因为您不是在line 上搜索正则表达式。

【讨论】:

  • 它有效,感谢您的提示。我的问题是为什么现在它有效?常规打开没有什么。在 java/c# 中,用 try catch 包装代码不会改变流程。
  • 不要混淆 withtrywith 用于管理 context(类似于 C 语言中的“范围”),其中 try用于管理异常。还有比这更多的问题,但这是另一个问题!
【解决方案2】:

文件并不总是立即写入磁盘,它们需要刷新 最后试试 out.flush()

【讨论】:

  • 好吧,with 指令会更好。此外,即使您不手动刷新它们,在脚本结束时(当流对象被销毁时)它也应该自动刷新。
  • 我不确定他的代码的环绕上下文是什么,只能看到那个片段......
猜你喜欢
  • 1970-01-01
  • 2019-12-13
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 2011-03-11
相关资源
最近更新 更多