2010-01-21 3 views
30

Скажем, у меня есть этот простой питон скрипт:Повторно открыть файлы на Python?

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

При запуске, первая печать печатает список, содержащий текст файла, в то время как вторая печать печатает пустой список. Не совсем неожиданно. Но есть ли способ «открутить» файл, чтобы я мог его прочитать снова? Или самый быстрый способ просто открыть его?

+1

Вы можете попробовать 'file.close()' и '' open' против file.seek' и доложить о что вы узнали. Затем мы могли бы прокомментировать ваши результаты. –

+1

Эй, c00kiemonster! Если ответ Алока отвечает на ваш вопрос, нажмите на галочку слева от его ответа. Это означает, что это «правильный ответ», поэтому другие люди в будущем будут знать, что он работает. Плюс это дает вам дополнительные очки репутации :-) – Smashery

+1

Я проверил быструю проверку в файле 170 тыс., И это было почти то же самое время, всего несколько миллисекунд. – c00kiemonster

ответ

65

Вы можете сбросить указатель на файл, вызвав seek():

file.seek(0) 

будет делать это. Вам понадобится эта строка после вашего первого readlines(). Обратите внимание, что file должен поддерживать произвольный доступ для работы выше.

+1

Awesome. Напоминает мне о хорошем старом взгляде и трясет вещи с преподобным C64! – c00kiemonster

+0

Я думаю, что это стандартный интерфейс POSIX. –

+0

@Stefano: Я думаю, что ты прав. 'seek()' файловых объектов в Python, скорее всего, является тонкой оболочкой вокруг 'fseek()' или аналогичной. –

3

Для маленьких файлов, вероятно, это намного быстрее, чтобы просто сохранить содержимое файла в памяти

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

Конечно, если это большой файл, это может поставить нагрузку на оперативную память.

3

Помните, что вы всегда можете использовать с заявлением для открытия и закрытия файлов:

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 
Смежные вопросы