2015-06-30 53 views
0

我有兩個txt文件,用50000和25000數據來比較哪些數據在兩個文件中,但只有第一行進行比較並添加到列表res1中(打印只是爲了瞭解它是如何工作的)當我運行代碼打印元組(如預期的那樣),但只打印lineCue中的值並避免第二個循環,列表結果只是lineCue提取的第一個值,而不是兩個文件中重複的所有值。當 我試圖通過另一種方式列表內容有24808個重複... :(爲什麼這個doble循環無法正常工作?

contratos = 'C:\\CONTRATOS.txt' 
cuentas = 'C:\\CUENTAS0.txt' 

res1 = [[], []] # res1[0] -> ID, res1[1] -> NO ID 
res2 = [] # res2 -> REPE 
with open(cuentas, 'rb') as cue: 
    with open(contratos, 'rb') as con: 
     for lineCue in cue.xreadlines(): 
      print(lineCue) 
      for lineCon in con.xreadlines(): 
       print(lineCue, lineCon) 
       if lineCue == lineCon: 
        res1[0].append(lineCon) 
print(res1[0]) 

輸出:

['O199924\r\n'] 

文件: https://dl.dropboxusercontent.com/u/33113171/CONTRATOS.txt https://dl.dropboxusercontent.com/u/33113171/CUENTAS0.txt

+0

如果您確定沒有任何重複,我會推薦創建一個集合。您可以將每個文件存儲在一個列表中,然後將這個列表與'in'進行比較。爲了避免出現'\ r \ n \'的問題,我建議您在比較這些行時使用'.rstrip()',以防兩個文件都不一樣 – Llopis

回答

1

在的第一次迭代外循環你讀整個文件con。你需要從每次開始讀取它。這樣做,使用con.seek(0)去到這個開始文件進入內部循環之前。