2016-08-04 9 views
1

У меня есть файл CSV, который выглядит как этотУдаление повторяющихся строк из CSV

red,75,right 
red,344,right 
green,3,center 
yellow,3222,right 
blue,9,center 
black,123,left 
white,68,right 
green,47,left 
purple,48,left 
purple,988,right 
pink,2677,left 
white,34,right 

Я использую Python и я пытаюсь удалить строки, которые имеют дубликат в ячейке 1. Я знаю, что могу достичь этого, используя что-то вроде pandas, но я пытаюсь сделать это, используя стандартную библиотеку CSV python.

ожидаемый результат ...

red,75,right 
green,3,center 
yellow,3222,right 
blue,9,center 
black,123,left 
white,68,right 
purple,988,right 
pink,2677,left 

Кто-нибудь есть пример?

+3

Я удаление панд тега, так как вы не хотите, решения панд. – ayhan

+0

Ожидаемый результат добавлен в исходное сообщение – fightstarr20

ответ

1

Вы можете просто использовать словарь, где цвет является ключом и значением является строка. Игнорируйте цвет, если он уже находится в словаре, иначе добавьте его и напишите строку в новый файл csv.

import csv 

file_in = 'input_file.csv' 
file_out = 'output_file.csv' 
with open(file_in, 'rb') as fin, open(file_out, 'wb') as fout: 
    reader = csv.reader(fin) 
    writer = csv.writer(fout) 
    d = {} 
    for row in reader: 
     color = row[0] 
     if color not in d: 
      d[color] = row 
      writer.writerow(row) 
result = d.values() 

result 
# Output: 
# [['blue', '9', 'center'], 
# ['pink', '2677', 'left'], 
# ['purple', '48', 'left'], 
# ['yellow', '3222', 'right'], 
# ['black', '123', 'left'], 
# ['green', '3', 'center'], 
# ['white', '68', 'right'], 
# ['red', '75', 'right']] 

И выход из файла CSV:

!cat output_file.csv 
# Output: 
# red,75,right 
# green,3,center 
# yellow,3222,right 
# blue,9,center 
# black,123,left 
# white,68,right 
# purple,48,left 
# pink,2677,left 
+0

Мой оригинальный вопрос был не очень ясен, я обновил его с ожидаемым выходом сейчас – fightstarr20

+0

Это отлично работает! Как вывести результат как CSV? – fightstarr20

+0

Я получаю, чтобы итератор возвращал строки, а не байты – fightstarr20

0

Вы можете попробовать это:

import fileinput 

def main(): 
    seen = set() # set for fast O(1) amortized lookup 

    for line in fileinput.FileInput('1.csv', inplace=1): 
     cell_1 = line.split(',')[0] 
     if cell_1 not in seen: 
      seen.add(cell_1) 
      print line, # standard output is now redirected to the file 

if __name__ == '__main__': 
    main() 
Смежные вопросы