2016-11-28 3 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 

EDIT:

Мои тестовые файлы выглядеть следующим образом
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 

Итак, я пытаюсь добавьте недостающие строки в test1.csv из test2.csv.

+0

Какая проблема возникла при выполнении сценария? – Atreys

+0

Он печатает каждую строку, даже если файлы идентичны. Я просто хочу, чтобы он печатал строки, которые находятся только в другом файле csv. – tmi12

+0

Можете ли вы уточнить несколько строк того, что находится в test1 и test2? если вы пытаетесь создать файл с именем test1.csv, почему в нем будут какие-либо строки, когда вы его сначала прочитаете? кажется скорее логической проблемой, чем кодированием. – Atreys

ответ

0

Файл test1.csv не изменяется в вашем фрагменте. Когда читатель создается с csv.reader(file1,delimiter=','), reader не обновляется после этого.

Вы : modifiying 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

Хорошо, он работает с двумя отдельными контурами. Благодаря! – tmi12

+0

Это не две петли, которые фиксировали его, но сохраняли строки в 'existingLines'. Этот csv.reader является итератором, а не полным списком всех строк в файле. – Atreys