【问题标题】:Re-open files in Python?在 Python 中重新打开文件?
【发布时间】:2010-01-21 03:57:53
【问题描述】:

假设我有这个简单的 python 脚本:

file = open('C:\\some_text.txt')
print file.readlines()
print file.readlines()

当它运行时,第一个打印打印一个包含文件文本的列表,而第二个打印打印一个空白列表。我猜这并不完全出乎意料。但是有没有办法“回退”文件以便我可以再次阅读它?或者是重新打开它的最快方法?

【问题讨论】:

  • 您可以尝试 file.close()openfile.seek 并报告您学到的东西。然后我们可以评论你的结果。
  • 嘿c00kiemonster!如果 Alok 的回答回答了您的问题,请按其回答左侧的勾号。这将其标记为“正确答案”,以便将来的其他人知道它有效。此外,它还为您提供额外的声望点 :-)
  • 我对一个 170k 的文件进行了快速测试,时间几乎相同,每次只有几毫秒。
  • 所以没有“最快”?这是底线吗?

标签: python file


【解决方案1】:

你可以通过调用seek()来重置文件指针:

file.seek(0)

会做的。在您的第一个 readlines() 之后需要该行。请注意,file 必须支持随机访问才能使上述功能正常工作。

【讨论】:

  • 太棒了。让我想起了古老的 C64 的偷看和戳东西!
  • 我认为这是标准的 POSIX 接口。
  • @Stefano:我认为你是对的。 Python 中文件对象的seek() 很可能是fseek() 或类似的薄包装器。
  • 正是操作系统调用。与基本 PEEK 和 POKE 无关。什么都没有。
【解决方案2】:

对于小文件,将文件的内容保存在内存中可能要快得多

file = open('C:\\some_text.txt')
fileContents = file.readlines()
print fileContents
print fileContents # This line will work as well.

当然,如果文件很大,这可能会给您的 RAM 带来压力。

【讨论】:

    【解决方案3】:

    请记住,您始终可以使用 with 语句打开和关闭文件:

    from __future__ import with_statement
    
    with open('C:\\some_text.txt') as file:
        data = file.readlines()
    #File is now closed
    for line in data:
        print line
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2016-07-20
      • 2019-01-05
      • 1970-01-01
      相关资源
      最近更新 更多