Страницы

Поиск по вопросам

понедельник, 17 декабря 2018 г.

заменить строки в одном текстовом файле информацией из второго

Именются 2 гигантских текстовых файла.
file1.txt (3,6 Гб) содержит только одну колонку (в том числе много дубликатов):
123456 123456 123456 абвгд абвгд 01щенок 01щенок 01щенок 01щенок 01щенок a0125uß a0125uß
file2.txt (1,5 ГБ) содержит ту же колонку, но без дубликатов плюс вторую колонку.
123456:artur абвгд:sergey 01щенок:max a0125uß:stasik
Задача: сравнить первые колонки в обеих файлах и заменить одинаковые строки в первом файле, строками из второй колонки второго файла, чтобы получилось следующее (дубликаты в первом файле должны остаться):
artur artur artur sergey sergey max max max max stasik stasik
У меня есть такой код:
import io STRFILE1 = 'file1.txt' STRFILE2 = 'file2.txt' STRFILERESULT = 'result.txt' fIN = open(STRFILE1,'r') strContent = fIN.read() fIN.close()
with open(STRFILE2,'r') as f: for line in f: mapping = line.split(":",1) strContent = strContent.replace(mapping[0],mapping[1].rstrip("
"))
fOUT = open(STRFILERESULT,'w') fOUT.write(strContent) fOUT.close()
но он работает вечно с таким объёмом строк (102.600.000 - файл 1 и 50.000.000 - файл 2). Как можно ускоритъ процесс обработки?


Ответ

Если на python, то можно так:
def story_key(): with open('te2', 'r') as f2: my_key = {i.split(':')[0]: i.split(':')[1].strip() for i in f2} return my_key
all_key = story_key()
def read_small(f_object, f_size=1024): while True: data = f_object.read(f_size) if not data: break yield data
def f_write(): with open('te1') as f1: with open('te3', 'a') as f3:
for i in read_small(f1): a = [all_key[j] + '
' for j in i.split('
') if j] f3.write(''.join(a))
f_write()

Комментариев нет:

Отправить комментарий