Я столкнулся с проблемой, с которой я не видел никого в StackOverflow или даже в Google в этом отношении.
Моя основная цель - иметь возможность заменить вхождения строки в файле другой строкой. Есть ли способ получить доступ ко всем строкам в файле.
Проблема в том, что когда я пытаюсь прочитать большой текстовый файл (1-2 ГБ) текста, python читает только его часть.
Например, я сделаю очень простую команду, например:
newfile = open("newfile.txt","w")
f = open("filename.txt","r")
for line in f:
replaced = line.replace("string1", "string2")
newfile.write(replaced)
И записывает только первые 382 мб исходного файла. Кто-нибудь сталкивался с этой проблемой ранее?
Я пробовал несколько разных решений, таких как использование:
import fileinput
for i, line in enumerate(fileinput.input("filename.txt", inplace=1)
sys.stdout.write(line.replace("string1", "string2")
Но эффект тот же. Также не читается файл по частям, например, с использованием
f.read(10000)
Я сузил его до вероятной проблемы с чтением, а не с записью, потому что это происходит из-за простой распечатки строк. Я знаю, что есть еще строки. Когда я открываю его в полнотекстовом редакторе, таком как Vim, я вижу, какой должна быть последняя строка, и это не последняя строка, которую печатает python.
Может ли кто-нибудь дать какие-либо советы или что-то попробовать?
В настоящее время я использую 32-разрядную версию Windows XP с 3,25 ГБ оперативной памяти и использую Python 2.7.
*Редактировать найденное решение (спасибо Lattyware). Использование итератора
def read_in_chunks(file, chunk_size=1000):
while True:
data = file.read(chunk_size)
if not data: break
yield data
with
при открытии файлов - это хорошая практика, чем правильно обрабатывать закрытие в исключениях. - person Gareth Latty   schedule 28.03.2012for line in f
). Так что, я думаю, нет проблем, но я думаю, что правильный ответ здесь - кодейп. - person Gareth Latty   schedule 28.03.2012