在Python中重新打开文件?

40

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

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

运行时,第一个print语句将打印包含文件文本的列表,而第二个print语句将打印空列表。我猜这并不完全出乎意料。但是是否有一种方法可以“倒回”文件,以便我可以再次读取它?或者最快的方法就是重新打开它吗?


1
你可以尝试使用file.close()open,与file.seek进行比较,并向我们汇报你所学到的内容。然后我们可以对你的结果进行评论。 - S.Lott
1
嘿c00kiemonster!如果Alok的回答解决了你的问题,请点击他答案左侧的勾号。这将标记它为“正确答案”,以便未来的其他人知道它是有效的。此外,这还会给你额外的声望积分 :-) - Smashery
1
我对一个大小为170k的文件进行了快速测试,时间几乎相同,每个测试只有几毫秒。 - c00kiemonster
那么就没有“最快”的吗?这是结论吗? - S.Lott
3个回答

81

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

file.seek(0)

好的,我会为您翻译。这行代码需要放在第一个readlines()之后。请注意,要让上面的代码工作,file必须支持随机访问。


1
太棒了。让我想起了那些古老的C64机器上的窥视和poke操作! - c00kiemonster
1
我认为这是标准的POSIX接口。 - Stefano Borini
@Stefano:我认为你是对的。在Python中,文件对象的seek()很可能只是fseek()或类似函数的薄包装器。 - Alok Singhal
1
这确实是操作系统调用。与Basic PEEK和POKE无关。没有任何关系。 - S.Lott

3

对于小文件,直接将文件内容存储在内存中可能更快。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接