Именются 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()
Комментариев нет:
Отправить комментарий