2017-10-06 822 views
0

我已經在SO上搜索了類似的問題,但沒有找到任何對我有用的東西。Python - 如何比較兩個文件並僅輸出第三個文件中的不同行

我有兩個大文件,它們應該是相同的,但其中一個文件比另一個長60行。我想知道這些線是什麼以及我可以在哪裏找到它們。

我讀過,可以使用difflib做到這一點,但我不知道如何去做。我總是在文件中獲得+-,但我不想那麼做。我只想掃描兩個文件並將不常見的60行報告到第三個文件中。

我寫了這段代碼,但它沒有打印出不同的行。

f1 = open('file1.txt','r') 
f2 = open('file2.txt','r') 
f3 = open('file3.txt','w') 

diff = set(f1).difference(f2) 
same.discard('\n') 

for line in same: 
    f3.write(line) 
+2

的[比較蟒蛇兩個文件報告的差異]可能的複製(https://stackoverflow.com/questions/19120489/compare-two-files-report-difference-in-python) –

+0

你能不能只需從shell中運行'diff'?爲什麼你需要編寫自己的工具?這是一個解決的問題。 –

+0

你得到的輸出是什麼? –

回答

2

嗯,你可以做這樣的事情:

with open('file1.txt') as infile: 
    f1 = infile.readlines() 

with open('file2.txt') as infile: 
    f2 = infile.readlines() 

only_in_f1 = [i for i in f1 if i not in f2] 
only_in_f2 = [i for i in f2 if i not in f1] 

with open('file3.txt', 'w') as outfile: 
    if only_in_f1: 
     outfile.write('Lines only in file 1:\n') 
     for line in only_in_f1: 
      outfile.write(line) 

    if only_in_f2: 
     outfile.write('Lines only in file 2:\n') 
     for line in only_in_f2: 
      outfile.write(line) 

注:在不同的線路相同的內容被當作一個差

0

您可以輕鬆地解決這個使用套。

set1 = set() 
with open(file1) as f: 
    for line in f: 
     set1.add(line.strip()) 
#Repeat for set 2 
with open(diff_file, 'w') as f: 
    for line in set2 - set1: 
     f.write(line + '\n') 
相關問題