Я не работал специально для CSV, однако мне пришлось использовать python для генерации документов для листов Google, при этом данные выглядели бы примерно так, где по сути каждый список представляет собой строку:
names = [['Name'], ['a'], ['b'], ['c']]
Возвращаясь к вашей проблеме, насколько я понимаю, вы хотите присоединиться к каждому из них, если они совпадают.
names = [['Name'], ['a'], ['b'], ['c']]
data = [['Name', 'Server', 'IP-Address'], ['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]
joined_data = []
for name, data in zip(names[1:], data[1:]):
if name in data:
joined_data.append(data)
print joined_data
, который выдает следующий результат
[['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]
Вы можете сделать это более питоническим с помощью понимания списка:
names = [['Name'], ['a'], ['b'], ['c']]
data = [['Name', 'Server', 'IP-Address'], ['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1']
joined_data = [data for name, data in zip(names[1:], data[1:]) if name[0] in data]
print joined_data
, который производит следующий вывод
[['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1'], ['c', 'server2', '0.0.0.1']]
Конечные точки
Как указано в этом посте :
В Python 2 zip возвращает список кортежей.Это хорошо, когда foo и bar не массивны.Если они оба массивные, то формирование zip (foo, bar) является излишне массивной временной переменной и должно быть заменено на itertools.izip
, что будет выглядеть примерно так:
import itertools
names = [['Name'], ['a'], ['b'], ['c']]
data = [['Name', 'Server', 'IP-Address'], ['a', 'server1', '127.0.0.1'], ['b', 'server1', '127.0.0.1']
joined_data = [data for name, data in itertools.izip(names[1:], data[1:]) if name[0] in data]
print joined_data
Наконец, причина, по которой я делаю ...zip(names[1:], data[1:])
, состоит в том, чтобы исключить первую «строку» (список) данных, которые являются заголовками, поскольку они на самом деле не являются данными, с которыми мы имеем дело.