Уведомления

Группа в Telegram: @pythonsu

#1 Май 19, 2013 23:11:54

admyn
От:
Зарегистрирован: 2006-12-20
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Разница между двумя файлами в третий

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

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()



Офлайн

#2 Май 20, 2013 01:25:12

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

Разница между двумя файлами в третий

for x, y in zip(base_file, second_file):
    if x != y:



Отредактировано py.user.next (Май 20, 2013 01:27:04)

Офлайн

#3 Май 20, 2013 05:38:28

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Разница между двумя файлами в третий

admyn
по теме,но о другом. Посмотрите в сторону модуля difflib, а также его реализации в виде скрипта лежащего примерно здесь C:\Python27\Tools\Scripts\diff.py (если говорить о ОС Windows)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Май 20, 2013 21:45:54

admyn
От:
Зарегистрирован: 2006-12-20
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Разница между двумя файлами в третий

py.user.next
Не, не работает, точно такой же результат как у меня ))

JOHN_16, спасибо, почитаю :)



Офлайн

#5 Май 21, 2013 06:02:49

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

Разница между двумя файлами в третий

admyn
точно такой же результат как у меня
у тебя он сравнивает каждую строку одного файла со всеми строками другого файла
у меня он сравнивает каждую строку одного файла с одной строкой другого файла

приведи пример первого файла, второго файла и третьего файла



Офлайн

#6 Май 22, 2013 12:56:22

admyn
От:
Зарегистрирован: 2006-12-20
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Разница между двумя файлами в третий

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()

ПС: Ответил так поздно так как несколько дней был очень занят.



Офлайн

#7 Май 22, 2013 13:34:29

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

Разница между двумя файлами в третий

#!/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() не подходит
можно и построчный перебор устроить, если файлы большие (не помещаются в память)



Отредактировано py.user.next (Май 22, 2013 13:38:49)

Офлайн

#8 Май 22, 2013 22:05:47

admyn
От:
Зарегистрирован: 2006-12-20
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Разница между двумя файлами в третий

Мммм, конечно спасибо, но я пытаюсь выучить Python 2 :)



Офлайн

#9 Май 23, 2013 08:13:18

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

Разница между двумя файлами в третий

#!/usr/bin/env python
скоро выйдет четвёртый питон



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version