2010-03-26 28 views
0

在A.TXT我有文本(線路一前一後)比較它應該顯示後蟒蛇兩個文件

login;user;name 
login;user;name1 
login;user 
在b.txt

我有文字

login;user 
login;user 
login;user;name2 

比較在一個文本文件中爲

login;user;name 
login;user;name1 
login;user;name2.... 

如何使用python完成?

+0

從上面的描述中找出文本文件的內容幾乎是不可能的。嘗試將其格式化爲代碼(每行前面有四個空格)。 –

+0

請定義文件的「比較」方式。它看起來更像是一個合併過程,關於哪些行保留的是什麼行被排除在外,一些奇怪的規則。例如,「登錄;用戶」行發生了什麼?如果有效需要合併(或與某些排除規則的合併),我們可以假定每個文件中的行都被排序? – mjv

+0

看起來像一行一行地「逐字」或者。 – waffleman

回答

1

也許標準庫difflib模塊可以幫助 - 檢查它的文檔。你的問題還不夠清楚,以獲得更完整的答案。

4
for a, b in zip(open('a'), open('b')): 
    print(a if len(a.split(';')) == 3 else b) 
+0

+1。請注意,此解決方案假定登錄;行的用戶部分的順序相同。如果不是,您需要對它們重新排序(例如按行排序)或創建字典。後一種技術更爲複雜,只有在OP沒有提及的附加約束時才需要。 – Brian

+1

看起來似乎是日誌文件(因此是「大」文件),可能建議使用itertools.izip()使用迭代器驅動循環,而不是先構建可能很大的序列。 – mjv

+0

@mjv:它是迭代器,在py3k – SilentGhost

0

根據所給出的模糊信息,我會嘗試像下面這樣:

import itertools 

def merger(fni1, fni2): 
    "merge two files ignoring 'login;user\n' lines" 
    fp1= open(fni1, "r") 
    fp2= open(fni2, "r") 
    try: 
     for line in itertools.chain(fp1, fp2): 
      if line != "login;user\n": 
       yield line 
    finally: 
     fp1.close() 
     fp2.close() 

def merge_to_file(fni1, fni2, fno): 
    with open(fno, "w") as fp: 
     fp.writelines(merger(fni1, fni2)) 

merge_to_file是你應該使用的函數。