Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2015 13:17:21

russian_bear
Зарегистрирован: 2014-09-23
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение текстовых файов

Alen

очень хочется чтобы твой код заработал и очень хочется сказать “спасибо” т.к. кажется что ты решаешь мою проблему, но к сожалению код не работает. см. скриншот.
(наверняка в коде какая-то примитивная ошибка. но я к сожалению действительно новичек в программировании и не могу сам найти причину почему код не выполняется)

Прикреплённый файлы:
attachment error.PNG (139,9 KБ)

Офлайн

#2 Янв. 9, 2015 13:24:32

russian_bear
Зарегистрирован: 2014-09-23
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

сравнение текстовых файов

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

Отредактировано russian_bear (Янв. 9, 2015 13:24:43)

Офлайн

#3 Янв. 9, 2015 13:42:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

сравнение текстовых файов

С 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 строк одинаковые.



Отредактировано py.user.next (Янв. 10, 2015 00:28:02)

Офлайн

#4 Янв. 9, 2015 13:58:47

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

сравнение текстовых файов

russian_bear
теперь все отлично и мгновенно работает.

Осторожней только с объёмами, а то сложность алгоритма O(1), но все делается в памяти, при большой длине строк и их количестве, возможно памяти не хватит, правда для имен доменов, их ну очень много нужно (миллиарды) чтобы такое произошло.

Отредактировано Alen (Янв. 9, 2015 14:00:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version