Форум сайта python.su
1
Вечер добрый! Пытаюсь написать скрипт который сверяет два текстовых фаила на наличии разницы. Если эта разница существует, пусть скрипт напишет её в третий файл. В файлах находятся телефоные номера, по одному номеру в каждом ряду. Никак не могу понять где я ощибаюсь. Можете даже не написать готовый ответ, а сказать что именно читать, а то вроде читаю, но так и не понял что по чём. Спасибо!
from sys import argv script, base_file, second_file, third_file = argv base_file = open(argv[1]).readlines() second_file = open(argv[2]).readlines() third_file = open(argv[3], 'w') for x in second_file: for y in base_file: if x != y: third_file.write(x) break third_file.close()
Офлайн
857
for x, y in zip(base_file, second_file): if x != y:
Отредактировано py.user.next (Май 20, 2013 01:27:04)
Офлайн
221
admyn
по теме,но о другом. Посмотрите в сторону модуля difflib, а также его реализации в виде скрипта лежащего примерно здесь C:\Python27\Tools\Scripts\diff.py (если говорить о ОС Windows)
Офлайн
1
py.user.nextНе, не работает, точно такой же результат как у меня ))
Офлайн
857
admynу тебя он сравнивает каждую строку одного файла со всеми строками другого файла
точно такой же результат как у меня
Офлайн
1
base_file.txt
79790104
79873070
69274656
69180377
60492209
78177852
79023243
69736256
68699620
79577311
78509545
69656007
68188871
60643247
78898817
79924105
79684143
79036022
69445507
60605544
79348181
69748018
69486323
69102802
68651099
second.txt
79577311
78509545
69656007
68188871
60643247
78898817
79924105
79684143
79036022
69445507
60605544
79348181
69748018
69486323
69102802
68651099
Ну а третий понятное дело создаётся во время проверки:
third.txt
79790104
79873070
69274656
69180377
60492209
78177852
79023243
69736256
68699620
79577311
78509545
69656007
68188871
60643247
78898817
79924105
А разница должна состоять из 9 номеров, которые есть в одном фаиле, а во втором их нету, но в 3 файл появляются не 9, а 16 номеров.
Ну, и сам скрипт:
from sys import argv script, base_file, second_file, third_file = argv base_file = open(argv[1]).readlines() second_file = open(argv[2]).readlines() third_file = open(argv[3], 'w') for x, y in zip(base_file, second_file): if x != y: third_file.write(x) # break third_file.close()
Офлайн
857
#!/usr/bin/env python3 ifile1 = 'file1.txt' ifile2 = 'file2.txt' ofile = 'output.txt' with open(ifile1) as fin1, \ open(ifile2) as fin2, \ open(ofile, 'w') as fout: res = set(fin1) ^ set(fin2) fout.write(''.join(sorted(res)))
60492209
68699620
69180377
69274656
69736256
78177852
79023243
79790104
79873070
Отредактировано py.user.next (Май 22, 2013 13:38:49)
Офлайн
1
Мммм, конечно спасибо, но я пытаюсь выучить Python 2 :)
Офлайн
857
#!/usr/bin/env python
Офлайн