Найти - Пользователи
Полная версия: сравнение текстовых файов
Начало » Python для новичков » сравнение текстовых файов
1 2
russian_bear
Alen

очень хочется чтобы твой код заработал и очень хочется сказать “спасибо” т.к. кажется что ты решаешь мою проблему, но к сожалению код не работает. см. скриншот.
(наверняка в коде какая-то примитивная ошибка. но я к сожалению действительно новичек в программировании и не могу сам найти причину почему код не выполняется)
russian_bear
Alen, я нашел ошибку, просто не скопировался бэкслэш в строке “with open('domains1.txt') as text_one,\”
теперь все отлично и мгновенно работает.
С П А С И Б О тебе О Г Р О М Н О Е ! ! !
(плюсую репутацию 100 раз)
py.user.next
С difflib там алгоритм неправильный. Не выделяет он строки, которые есть только в одном из файлов.

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

#!/usr/bin/env python3
 
def diff(name1, name2):
    with open(name1) as ifp1, \
         open(name2) as ifp2:
        return set(ifp1) ^ set(ifp2)
 
def main():
    d = diff('file1.txt', 'file2.txt')
    with open("out.txt", "w") as fout:
        fout.writelines(d)
 
if __name__ == '__main__':
    main()

[guest@localhost diff]$ ll
итого 21456
-rwxrw-r--. 1 guest guest 320 янв 9 21:32 diff.py
-rw-rw-r--. 1 guest guest 5490995 янв 9 21:39 file1.txt
-rw-rw-r--. 1 guest guest 5490995 янв 9 21:39 file2.txt
-rw-rw-r--. 1 guest guest 10977790 янв 9 21:40 out.txt
[guest@localhost diff]$ wc -l file1.txt
200100 file1.txt
[guest@localhost diff]$ wc -l file2.txt
200100 file2.txt
[guest@localhost diff]$ time ./diff.py

real 0m0.575s
user 0m0.524s
sys 0m0.045s
[guest@localhost diff]$ wc -l out.txt
400000 out.txt
[guest@localhost diff]$

Полсекунды уходит на два файла по 200100 строк, где последние 100 строк одинаковые.
Alen
russian_bear
теперь все отлично и мгновенно работает.

Осторожней только с объёмами, а то сложность алгоритма O(1), но все делается в памяти, при большой длине строк и их количестве, возможно памяти не хватит, правда для имен доменов, их ну очень много нужно (миллиарды) чтобы такое произошло.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB