Прочитайте большой текстовый файл и запишите в другой файл с помощью Python - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь конвертировать большой текстовый файл (размер 5 гиг ​​+), но получил Из этой записи мне удалось преобразовать формат кодирования текстового файла в формат, который можно прочитать с помощью этого:

path ='path/to/file'
des_path = 'path/to/store/file'
for filename in os.listdir(path):
    with open('{}/{}'.format(path, filename), 'r+', encoding='iso-8859-11') as f:
            t = open('{}/{}'.format(des_path, filename), 'w')
            string = f.read()
            t.write(string)
            t.close()

Проблема здесь в том, что при попытке конвертировать текстовый файл большого размера (+ 5 ГБ). Я получу эту ошибку

Traceback (most recent call last):
  File "Desktop/convertfile.py", line 12, in <module>
    string = f.read()
  File "/usr/lib/python3.6/encodings/iso8859_11.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
MemoryError

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

Итак, как мне применить код, который я должен сделать, чтобы он читал построчно? Что я понимаю, читая построчно здесь, это то, что мне нужно прочитать строку от f и добавить ее к t до конца строки, верно?

1 Ответ

1 голос
/ 09 июля 2019

Вы можете перебирать строки открытого файла.

for filename in os.listdir(path):
    inp, out = open_files(filename):
    for line in inp: 
        out.write(line)
    inp.close(), out.close()

Обратите внимание, что я скрыл сложность различных путей, кодировок, режимов в функции, которую я предлагаю вам написать ...

Повторная буферизация, то есть чтение / запись больших кусков текста, Python выполняет свою собственную буферизацию под прикрытием, поэтому это не должно быть слишком медленным по отношению к более сложному решению.

...