Проверка сходства файлов с использованием Python 2.7.15 - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать скрипт на python, который выводит сходства 2 разных файлов в третий файл.Я понимаю, что есть простой способ сделать это, проверяя каждую строку в обоих файлах, используя вложенные циклы for, но я предпочел не делать этого, потому что я пытаюсь заставить его работать как можно быстрее.Это потому, что я работаю с полужесткими файлами (по 100-200 МБ каждый), и проверка каждой строки в обоих файлах займет гораздо больше времени, чем я наткнулся на следующую:

Быстрая альтернатива, которую я нашел, это импорт mmap.и использование функции .find () для проверки каждой строки в первом файле

import mmap
import time
RESULTS = open('sims.txt', 'w')
f1 = open('file1.txt', 'r')
f = open('file2.txt')
f2 = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
for line1 in f1:
    if len(line1) > 3:
        if f2.find(line1) != -1:
            RESULTS.write(line1)
RESULTS.close()
f1.close()

Этот метод очень быстр при чтении второго файла и не содержит синтаксических ошибок, но просто не работает должным образом,Вот пример file1.txt и file2.txt

file1:

orange

hotdog
pig

file2:

apple
mango
orange
pig

hotdog

Вывод должен быть оранжевым и хотдогом на sims.txt, но sims.txt всегда пуст.Пожалуйста, дайте мне знать, если есть способ исправить это или лучший способ сделать это, сохраняя при этом скорость функции find (), или это просто невозможно.Спасибо!

(PS Я только начал изучать Python 2-3 дня назад, поэтому вполне возможно, что я совершил простую ошибку)

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете проверить с if line1 in f:

import time
RESULTS = open('sims.txt', 'w')
f1 = open('file1.txt', 'r')
f = open('file2.txt')
for line1 in f1:
    if len(line1) > 3:
        if line1 in f:
            RESULTS.write(line1)
RESULTS.close()
f1.close()

Вы должны быть осторожны, потому что line1 читает новые строки

...