【问题标题】:writing without closing in python在 python 中不关闭的情况下编写
【发布时间】:2012-08-19 09:17:09
【问题描述】:

我想在不关闭的情况下写入文本文件,因为我不知道我会停止关闭什么,我将解释漏洞问题

我创建了名为 resume.txt 的文本,因此在我的项目中的每个特定进程之后,它将覆盖 resume.txt 所以每次我的项目启动时,它都会检查该文件以了解最后的进程,所以每次写入后我的问题我必须关闭才能应用它,我真的不认为这很好,我认为有更好的解决方案

此代码不起作用

wr = open('resume.txt','w')
login(usr,pas)
wr.write('login')
post(msg,con)
wr.write('post')
..so on 

问题是如何在不关闭的情况下编写,我不能在最后写wr.close,因为它可能被用户终止或连接超时......等等

【问题讨论】:

  • 你到底想做什么? with 关键字可能就是您要查找的内容。
  • 也许您想将缓冲区刷新到您的文件中?看看[这个][1]。 [1]:stackoverflow.com/questions/3167494/…
  • 如果您想在写入文件时“看到”您在文件中写入的内容,您需要在每次写入后flush() 文件句柄。写入缓冲区的这种刷新是在每个文件句柄 close() 上完成的
  • tMC 不错的解决方案,但它没有覆盖

标签: python text io python-2.7 overwrite


【解决方案1】:

不确定这是否适用于您的代码,但包装在 with 块中怎么样?

with open('resume.txt','w') as wr:
    login(usr,pas)
    wr.write('login')
    # This is hacky, but it will go to the beginning 
    # of the file and then erase (truncate) it
    wr.seek(0)
    # I think you wanted to do this after you tried an action, 
    # but you can move it to wherever you want
    post(msg,con)
    wr.truncate()
    wr.write('post')

这将确保文件在出错时关闭。当您想关闭文件时,只需在与with 相同的级别启动下一个代码即可:

with open('resume.txt','w') as wr:
    login(usr,pas)
    wr.write('login')
    wr.seek(0)
    post(msg,con)
    wr.truncate()
    wr.write('post')
    # wr.seek(0) ...

# Next steps...

我还建议您查看logging 模块,看看它是否可以实现您想要的。

【讨论】:

  • 现在更新 - 这有点/非常 hacky,但在每次操作后,它会将位置重置为文件的开头,然后删除文件的其余部分。我不知道您的用例是什么,但您也可以查看日志记录 (docs.python.org/library/logging.html) 模块,该模块还可以处理写入文件。
【解决方案2】:

首先我要感谢 tMC

解决办法是

wr = open('resume.txt','w')
login(usr,pas)
wr.write('login')
wr.flush()
post(msg,con)
wr.seek(0)
wr.write('post')
wr.flush()

我使用flush() 编写和应用,seek(0) 用于覆盖

【讨论】:

  • 您也可以每次使用 with 块重新打开文件以确保文件关闭。
【解决方案3】:

试试the with statement。理解起来有点复杂,但应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多