Найти - Пользователи
Полная версия: Разница между двумя файлами в третий
Начало » Python для новичков » Разница между двумя файлами в третий
1
admyn
Вечер добрый! Пытаюсь написать скрипт который сверяет два текстовых фаила на наличии разницы. Если эта разница существует, пусть скрипт напишет её в третий файл. В файлах находятся телефоные номера, по одному номеру в каждом ряду. Никак не могу понять где я ощибаюсь. Можете даже не написать готовый ответ, а сказать что именно читать, а то вроде читаю, но так и не понял что по чём. Спасибо!

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()
py.user.next
for x, y in zip(base_file, second_file):
    if x != y:
JOHN_16
admyn
по теме,но о другом. Посмотрите в сторону модуля difflib, а также его реализации в виде скрипта лежащего примерно здесь C:\Python27\Tools\Scripts\diff.py (если говорить о ОС Windows)
admyn
py.user.next
Не, не работает, точно такой же результат как у меня ))

JOHN_16, спасибо, почитаю :)
py.user.next
admyn
точно такой же результат как у меня
у тебя он сравнивает каждую строку одного файла со всеми строками другого файла
у меня он сравнивает каждую строку одного файла с одной строкой другого файла

приведи пример первого файла, второго файла и третьего файла
admyn
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()

ПС: Ответил так поздно так как несколько дней был очень занят.
py.user.next
#!/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)))

output.txt
60492209
68699620
69180377
69274656
69736256
78177852
79023243
79790104
79873070

тогда zip() не подходит
можно и построчный перебор устроить, если файлы большие (не помещаются в память)
admyn
Мммм, конечно спасибо, но я пытаюсь выучить Python 2 :)
py.user.next
#!/usr/bin/env python
скоро выйдет четвёртый питон
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