Поиск большого файла для текста и запись результата в файл - PullRequest
1 голос
/ 17 мая 2019

У меня есть первый файл, который составляет 2,4 миллиона строк (256 МБ), а второй - 32 тысячи строк (1,5 МБ).

Мне нужно пройти файл два за строкой и напечатать соответствующую строку в файле один.

псевдокод:

open file 1, read
open file 2, read
open results, write

for line2 in file 2:
    for line1 in file 1:
        if line2 in line1:
            write line1 to results
            stop inner loop

Мой код:

p = open("file1.txt", "r")
d = open("file2.txt", "r")
o = open("results.txt", "w")

for hash1 in p:
    hash1 = hash1.strip('\n')
    for data in d:
        hash2 = data.split(',')[1].strip('\n')
        if hash1 in hash2:
            o.write(data)

o.close()
d.close()
p.close()

Я ожидаю 32k результатов.

1 Ответ

0 голосов
/ 17 мая 2019

Ваш файл2 не слишком большой, поэтому он идеально подходит для загрузки в память.

  • Загрузка file2.txt в набор для ускорения процесса поиска и удаления дубликатов;
  • Удалить пустую строку из набора;
  • Сканирование file1.txt построчно и запись найденных совпадений в results.txt.

with open("file2.txt","r") as f:
    lines = set(f.readlines())

lines.discard("\n")

with open("results.txt", "w") as o:
    with open("file1.txt","r") as f:
        for line in f:
            if line in lines:
                o.write(line)

Если бы file2 был больше, мы могли бы разделить его на части и повторить то же самое для каждого фрагмента, но в этом случае было бы сложнее скомпилировать результаты вместе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...