Как я могу объединить строки CSV, которые имеют одинаковое значение в первой ячейке?
Это файл: https://drive.google.com/file/d/0B5v-nJeoVouHc25wTGdqaDV1WW8/view?usp=sharing
Как видите, в первом столбце есть дубликаты, но если бы я соединил дублирующиеся строки, никакие данные не были бы переопределены в других столбцах. Есть ли способ объединить строки с повторяющимися значениями в первом столбце?
Например, поверните "1,A,A,," и "1,,,T,T" в "1,A,A,T,T".
1 ответ
Простой Python:
import csv
reader = csv.Reader(open('combined.csv'))
result = {}
for row in reader:
idx = row[0]
values = row[1:]
if idx in result:
result[idx] = [result[idx][i] or v for i, v in enumerate(values)]
else:
result[idx] = values
Как работает это волшебство:
- перебирать строки в файле CSV
- для каждой записи мы проверяем, была ли запись с таким же индексом до
- если мы видим этот индекс впервые, просто скопируйте значения строк
- если это дубликат, присвойте значения строк пустым ячейкам.
Последний шаг сделан через or
хитрость: None or value
вернусь value
, value or anything
вернусь value
, Так, result[idx][i] or v
вернет существующее значение, если оно не пустое, или значение строки.
Чтобы вывести это без потери дублированных строк, нам нужно сохранить индекс, затем выполнить итерацию и вывести соответствующие result
записей:
indices = []
for row in reader:
# ...
indices.append(idx)
writer = csv.writer(open('outfile.csv', 'w'))
for idx in indices:
writer.writerow([idx] + result[idx])