2017-02-02 22 views
0

У меня есть 2 CSV-файла, содержащих два столбца и большое количество строк. Первый столбец - это идентификатор, а второй - набор парных значений. .: напримерКак найти пересечение или подмножество двух файлов CSV

CSV1:

1 {[1,2],[1,4],[5,6],[3,1]} 

2 {[2,4] ,[6,3], [8,3]} 

3 {[3,2], [5,2], [3,5]} 

CSV2:

1 {[2,4] ,[6,3], [8,3]} 

2 {[3,4] ,[3,3], [2,3]} 

3 {[1,4],[5,6],[3,1],[5,5]} 

Теперь мне нужно, чтобы получить CSV-файл, который содержит либо точные детали соответствия или подмножество, которое принадлежит к обоим томами CSV.

Вот результат должен быть:

{[2,4] ,[6,3], [8,3]} 

{[1,4],[5,6],[3,1]} 

Можно ли предложить питона код, чтобы сделать это?

+0

Я попытался немного улучшить форматирование и вопрос. Вы пробовали что-нибудь? – agold

ответ

0

Как предложено этим answer, вы можете использовать set.intersection, чтобы получить пересечение двух наборов, однако это не работает со списками в качестве элементов. Вместо этого, вы можете также использовать filter (по сравнению с this answer):

>>> l1 = [[1,2],[1,4],[5,6],[3,1]] 
>>> l2 = [[1,4],[5,6],[3,1],[5,5]] 
>>> filter(lambda q: q in l2, l1) 
[[1, 4], [5, 6], [3, 1]] 

В Python 3, вы должны преобразовать его в list поскольку filter возвращает итератор:

>>> list(filter(lambda x: x in l2,l1)) 

Вы можете загрузить CSV файлы (если они действительно являются разделяемыми файлами запятой [или некоторыми другими символами]), например, csv.reader или pandas.read_csv.