Как объединить несколько строк текста в одну строку в Python с разделителем, чтобы разделить их большими файлами (4 ГБ +) - PullRequest
0 голосов
/ 26 января 2020

Я использую этот код для объединения строк, но он не работает с большими файлами. Какое решение объединить без дампа большой файл все в памяти? Мне нужно добавить разделитель "|", этот между строк. Этот код работает нормально, но не работает с файлом большого размера.

current = None 
parts = [] 
with open('DEFIS.TXT', 'r', encoding="utf-8", errors="ignore") as f:
    for line in f:
        if line.startswith('D1000'):
            current = [line.strip()]
            parts.append(current)
        elif current is not None:
            current.append(line.strip())

with open('DEFIS-OUT.TXT', 'w') as f:
    f.write('\n'.join(('|'.join(part) for part in parts)))

1 Ответ

1 голос
/ 26 января 2020

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

current = []

with open('DEFIS.TXT', 'r') as f_in, open('DEFIS-OUT.TXT', 'w') as f_out:
    for line in map(str.strip, f_in):
        if line.startswith('D1000'):
            if current:
                print('|'.join(current), file=f_out)
            current = []
        current.append(line)
    #save last chunk (if any):
    if current:
        print('|'.join(current), file=f_out)

Если DEFIS.TXT содержит:

D1000
1
2
3
D1000
4
5
6
D1000
7
8
9

Тогда DEFIS-OUT.TXT после запуска скрипта будет содержать:

D1000|1|2|3
D1000|4|5|6
D1000|7|8|9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...