2015-12-13 5 views
0

Привет, я пытаюсь сравнить два текстовых файла в Python, по сути, я хочу их открыть и сравнить один символ за раз, если символы разные, добавьте 1 к счетчику и затем отобразите это значение.Сравнение двух текстовых файлов в python и подсчет различий

Вот то, что я до сих пор:

#!/usr/bin/env python 

diff = 0 

import random 
import string 
import sys 

file_A = sys.argv[1] 
file_B = sys.argv[2] 

read_A=open(file_A,'r').read() 
read_B=open(file_B,'r').read() 

for a in read_A: 
    for b in read_B: 
     if a != b: 
      diff = diff + 1 
    return diff 
break 

print "No of Differences ",diff 

Прямо сейчас это рассчитывать, но значение возвращается не кажется правильным.

Любой совет или помощь будет оценена

+1

Есть ли у вас оба файла одного размера? Если нет, как бы вы хотели, чтобы ваш скрипт справился с этим? – Mike

+2

Мне кажется, что вы только начинаете свое путешествие на Python и, возможно, программируете. I Googled для сравнения двух текстовых файлов и составил 335K результатов. Я бы посоветовал вам взглянуть на эти примеры. Ваш вопрос слишком расплывчатый. Если вам действительно нужен ответ, вы должны проиллюстрировать, почему вывод, который вы получаете, - это не то, что вы ожидали. Но на самом деле вам стоит закрыть этот вопрос и взглянуть на одно из решений и попытаться понять его. – PyNEwbie

+0

Вы хотите сравнить строки за строкой? – Zety

ответ

1

Если у вас есть две строки, которые вы хотите сравнить по характеру персонажа, лучше всего их застегнуть.

Итак, как только вы лань это:

read_A=open(file_A,'r').read() 
read_B=open(file_B,'r').read() 

вы:

for char_a, char_b in zip(read_A, read_B): 
    if char_a != char_b: 
     # something 

Если ваши файлы очень большие, вы можете только читать посимвольно и использовать izip вместо из zip ...

BTW ...

Вы не закрываете свои файлы. Рекомендуется всегда обращаться к файлам таким образом:

with open(file_A, 'r') as f1: 
    read_A = f1.read() 

with open(file_B, 'r') as f2: 
    read_B = f2.read() 
+0

Это, кажется, сработало Спасибо – randomer

+0

Если файлы очень большие, ему лучше читать один байт из обоих файлов за раз и сравнивать их. Вы можете разбить цикл, когда один файл возвращает литерал EOF, или даже лучше, итерации столько раз, сколько счетчик байтов меньшего файла. 'zip()' ведет себя одинаково для итераций в любом случае. – Reti43

1

Самый простой способ сделать это состоит в использовании difflib. Он не требует никаких дополнительных яиц для python и дает действительно хорошие результаты для отслеживания различных видов проверок diff. Результатом проверки diff будет то, что вы хотели бы проверить на равенство, а также на тесные совпадения. Это может быть важно, если вы допустите взвешивание результатов.

1

Цитирование не является, конечно, питоническим способом сделать это. Без использования каких-либо внешних библиотек, вы можете использовать простой список понимание, чтобы найти примеры различий между двумя файлами:

Если порядок имеет значение:

x=[i for i, j in zip(read_A, read_B) if i != j] 
print len(x) 

Если заказ не значительным:

x=[i in read_B for i in read_A] 
#Now count the instances where the comparison resulted in False 
i = x.count(False) 
+0

Это будет означать, что любой символ в B соответствует символу в A, например. нет разницы для 'read_B = 'abcdefgh'' и' read_A =' aaabbc'' – zvone

+0

Спасибо, что, указав это, я отредактировал мой код, когда порядок значителен. – Learner

Смежные вопросы