2016-11-28 25 views
0

我試圖從舊文件中創建一個組合的csv文件,其中有一些重複項,但是在我的代碼中出現錯誤。 'test2.csv'更大並且有新的行,'test1.csv'是我正在嘗試創建的新文件。如何檢查csv中是否已存在行

new = [] 
with open('test1.csv','rb') as file1: 
    reader = csv.reader(file1,delimiter=',') 
    with open('test2.csv','rb') as file2: 
     reader2 = csv.reader(file2,delimiter=',') 
     for row in reader2: 
      if row not in reader: 
       new.append(row) 

for row in new: 
    print row 

編輯:

我的測試文件看起來像這樣
test1.csv:

28/11 16 VwS (10) Ha MaSSe (16) mirage Global Offensive Champions League Season 5 39247 6756 7472 2596 10 16 8459,9434,11307,9410,8460 11838,11837,12943,11840,12944 
28/11 16 Ulti (0) Signature (16) mirage fpsGOD Super League Winter 39251 7343 6774 2533 0 16 12429,12427,12430,12428,12431 9288,10664,9289,11248,12129 

test2.csv:

28/11 16 Singularity (14) Elements (16) nuke Global Offensive Champions League Season 5 39252 6978 7489 2596 14 16 9317,2822,8862,8875,7463 8726,7405,8727,8368,8410 
28/11 16 eSuba (9) Pathless (16) cache Gauntlet: Fight for the Crown 39253 5412 7433 2430 9 16 9666,10458,7723,9358,3143 9891,9412,12767,12945,12766 
28/11 16 Pathless (16) eSuba (13) mirage Gauntlet: Fight for the Crown 39248 7433 5412 2430 16 13 9412,12945,12767,9891,12766 9666,7723,10458,9961,9358,3143 
28/11 16 VwS (10) Ha MaSSe (16) mirage Global Offensive Champions League Season 5 39247 6756 7472 2596 10 16 8459,9434,11307,9410,8460 11838,11837,12943,11840,12944 
28/11 16 Ulti (0) Signature (16) mirage fpsGOD Super League Winter 39251 7343 6774 2533 0 16 12429,12427,12430,12428,12431 9288,10664,9289,11248,12129 

所以,我想將缺少的行添加到test2.csv中的test1.csv。

+0

執行腳本時遇到了什麼問題? – Atreys

+0

即使文件相同,也會打印每一行。我只是希望它打印只在其他csv文件中的行。 – tmi12

+0

你能用幾行來說明test1和test2是什麼嗎?如果您正在嘗試創建一個名爲test1.csv的文件,那麼當您最初閱讀它時爲什麼會有任何行?似乎比編碼更像一個邏輯問題。 – Atreys

回答

0

文件test1.csv未在您的代碼段中修改。當使用csv.reader(file1,delimiter=',')創建閱讀器時,reader之後根本不會更新。

在你的循環中修改new,所以檢查你的線是否在那裏。 如果你想不打印出已在test1.csv行,你需要閱讀和檢查,如果他們遍歷在第二個文件中的行時不重複。

with open('test1.csv','rb') as file1: 
    existingLines = [line for line in csv.reader(file1, delimiter=',')] 

new = [] 
with open('test2.csv','rb') as file2: 
    reader2 = csv.reader(file2,delimiter=',') 
    for row in reader2: 
     if row not in new and row not in existingLines: 
      new.append(row) 

for row in new: 
    print row 
+0

好吧,它適用於2個獨立的循環。謝謝! – tmi12

+0

這不是固定它的兩個循環,而是將行存儲在'existingLines'中。該csv.reader是一個迭代器,而不是文件中所有行的完整列表。 – Atreys