在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完成?
在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完成?
也許標準庫difflib
模塊可以幫助 - 檢查它的文檔。你的問題還不夠清楚,以獲得更完整的答案。
for a, b in zip(open('a'), open('b')):
print(a if len(a.split(';')) == 3 else b)
+1。請注意,此解決方案假定登錄;行的用戶部分的順序相同。如果不是,您需要對它們重新排序(例如按行排序)或創建字典。後一種技術更爲複雜,只有在OP沒有提及的附加約束時才需要。 – Brian
看起來似乎是日誌文件(因此是「大」文件),可能建議使用itertools.izip()使用迭代器驅動循環,而不是先構建可能很大的序列。 – mjv
@mjv:它是迭代器,在py3k – SilentGhost
根據所給出的模糊信息,我會嘗試像下面這樣:
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
是你應該使用的函數。
從上面的描述中找出文本文件的內容幾乎是不可能的。嘗試將其格式化爲代碼(每行前面有四個空格)。 –
請定義文件的「比較」方式。它看起來更像是一個合併過程,關於哪些行保留的是什麼行被排除在外,一些奇怪的規則。例如,「登錄;用戶」行發生了什麼?如果有效需要合併(或與某些排除規則的合併),我們可以假定每個文件中的行都被排序? – mjv
看起來像一行一行地「逐字」或者。 – waffleman