Буферизация файлов Python
Мне нужно несколько раз перебирать строки из нескольких текстовых файлов. В настоящее время это выполняется с несколькими
with open("file.txt") as f:
for line in f:
# do something
Хотя производительность еще не проблема, я хотел бы прочитать файлы только один раз в буфере io.StringIO
а затем работать с этим.
Python io
docs:
Это рабочий фрагмент
import io
sio = io.StringIO( open("file.txt").read() )
for line in sio:
print(line)
sio.seek(0)
for line in sio:
print(line)
sio.close()
или обертывание его в диспетчере контекста с помощью оператора
import io
with io.StringIO( open("file.txt").read() ) as sio:
for line in sio:
print(line)
sio.seek(0)
for line in sio:
print(line)
#sio.close()
Вопросы
Это "хороший" способ сделать это, какие альтернативы? Что происходит с файлом, используемым для чтения файла (нет способа явноclose()
он таким образом)? Где я могу узнать больше о буферизации Python io (я думаю, что я что-то читал о том, что Python оптимизирует несколько попыток доступа к файлам путем буферизации автоматически)?
То, что вы делаете, уже правильно. Цитата из этого ответа: Как читать большой файл, строка за строкой в python
Оператор
with
обрабатывает открытие и закрытие файла, в том числе, если во внутреннем блоке создается исключение. Вfor line in f
рассматривается файловый объектf
как итеративный, который автоматически использует буферизованное управление вводами и памятью, поэтому вам не нужно беспокоиться о больших файлах.