【问题标题】:How to reload a file in python?如何在python中重新加载文件?
【发布时间】:2014-08-15 04:34:37
【问题描述】:

如果我有一个脚本将 1000 行写入文件,然后针对该文件继续正则表达式,那么只有最后 100 行写入的文本可用。解决此问题的一种方法是关闭并重新打开文件。有没有办法在写入文件后重新加载文件,或者我应该只做一个写关闭打开模块?第一次打开时日志文件不存在/为空可能与此有关。

>>> the_page = 'some large site opened through urllib'
>>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
>>> logfile.write(the_page)
>>> print logfile.read()

什么都没有出现。

>>> 'Some regular expressions search'

搜索最后写入的 100 行。

>>> logfile.close()
>>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
>>> print logfile.read()

一切都出现了。

>>> 'Some regular expressions search'

按预期执行。

【问题讨论】:

    标签: python file-io


    【解决方案1】:

    这只是一种预感,但也许在写作完成后logfile.seek(0) 可能会有所帮助。 file.next的文档中给出了可能的解释:

    但是,使用 seek() 将文件重新定位到 绝对位置将刷新预读缓冲区。

    【讨论】:

      【解决方案2】:
      logfile.flush()
      

      这应该和打开然后关闭文件一样。

      【讨论】:

      • 是的,我非常想做与此相反的事情。就我的问题而言,冲洗可以与关闭互换。
      • @teratomata,你能解释一下为什么你不想刷新文件吗?
      • 刷新清除文件对象,我想做的是重新加载已写入的文件。实际上我不知道我想做的是回到文件的开头,这就是 seek(0) 所做的。
      【解决方案3】:

      正如 cmets 指出的那样,这是错误的做法。 seek(0) 是正确的方法。

      这有一个非常明显的答案,我不需要关闭文件或任何东西,我可以再次打开它,它的作用与重新加载相同。所以:

      >>> the_page = 'some large site opened through urllib'
      >>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
      >>> logfile.write(the_page)
      >>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
      >>> print logfile.read()
      

      【讨论】:

      • 这很可能是关闭文件然后重新打开它。正如 Space_C0wb0y 所写,您可能应该 seek(0),因为写入后您位于文件末尾,这就是您无法读取任何内容的原因。
      • 使用 cpython 的引用计数,当您重新打开文件时,这只是对文件进行隐藏的flushclose。这对于使用另一种类型的垃圾收集的任何 Python 实现都无法正常工作
      猜你喜欢
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2021-05-14
      相关资源
      最近更新 更多