У меня возникает проблема, с которой я не встречал никого на встрече StackOverflow или даже на Google.
Моя главная цель - возможность заменить вхождения строки в файле другой строкой. Есть ли способ, чтобы иметь возможность использовать все строки в файле.
Проблема заключается в том, что когда я пытаюсь читать в большом текстовом файле (1-2 gb) текста, 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). Использование Iterator
def read_in_chunks(file, chunk_size=1000):
while True:
data = file.read(chunk_size)
if not data: break
yield data