我可以在python中不断打开文件吗?

时间:2014-04-18 03:49:52

标签: python file

我发现每次打开文件并阅读其内容时,它都会自动关闭。所以下次我必须再次打开该文件才能阅读它。我知道减少内存使用量可能是一个好主意。但由于我当前的任务,我需要不断打开文件。

我该怎么做?

这是我目前阅读文件的方式

f = open('some_file', 'rU')
f.read()

2 个答案:

答案 0 :(得分:4)

执行f.read()后,文件不会关闭。事实上,除非你明确地调用f.close()或者在像这样的with块中使用它,否则它不会关闭:

with open('some_file') as f:
     ...

在这种情况下,当with块结束时,文件将被关闭。当文件对象没有更多与之关联的变量时(即,当f超出范围或被重新分配时),它也将倾向于关闭,但这不是保证的行为。如果这些都不会发生, 文件将保持打开状态。

您最有可能看到的问题是再次调用read会得到一个空字符串。这不会发生,因为文件已关闭 - 从已关闭的文件中读取会给您一个错误。相反,文件会跟踪您已阅读的位置,因此,如果您只读取其中的一部分,则可以请求 next 部分,它将从正确的位置开始。要将其重新设置为再次从文件的开头读取,您可以使用seek方法:

with open('some_file') as f:
   contents1 = f.read()
   f.seek(0)
   contents2 = f.read()

将为您提供包含文件全部内容的contents1和contents2,而不是contents2为空。但是,除非文件在此期间发生变化,否则您可能不想这样做。

答案 1 :(得分:0)

要确保您的文件一致打开或始终打开,您需要关闭文件或seek0

while True:
    f = open(...) 
    x = f.read() 
    print x
    f.close()

f = open(...) 
while True:
    x = f.read() 
    print x
    f.seek(0)

...除非你打算写一个单行代码,它会自动关闭。

print open('some_file', 'rU').read()

这避免了对打开文件数量的任何限制。

补充一点:您也可以再次使用for line in open(...): pass,只要您记得以这种或那种方式到达文件的开头。