2015-03-25 2 views
1

С помощью csv целью является создание списка для каждого столбца в csv, игнорируя первую строку, которая является строкой заголовка.Принимая каждый столбец как свой собственный список

var_a  var_b 
    a   1 
    b   2 
    c   3 

listA = [var_a] = ['a','b','c'] 
listB = [var_b] = [1,2,3] 

Прямо сейчас, мое единственное решение, чтобы создать пустой список и перебирать позицию Csv положением и добавить его в эти пустые списки.

+0

Является [pandas.read_csv] (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.parsers.read_csv.html) не жизнеспособным решением? – cbare

ответ

1

Если у вас есть достаточно памяти, вы можете получить немного больше элегантности:

with open('the.csv') as f: 
    next(f) 
    list_of_rows = list(csv.reader(f)) 

listA = [row[0] for row in list_of_rows] 
listB = [int(row[1]) for row in list_of_rows] 

, но это не чрезвычайно отличается от того, что вы говорите, что вы делаете сейчас - только чуть более элегантно.

(В вашем примере второй столбцы каким-то образом дает список int с в то время как первый из них дает список str с - нет черной магии, чтобы сделать что, либо, так что я явно использовал int где она появляется требуется).

0

Вы проверили инструменты csv, которые поставляются с python? Они могут помочь уменьшить ваш код.

Кроме того, с точки зрения сложности, итерация по каждому элементу - это лучшее, что вы можете сделать. Если это проще, вы можете попытаться загрузить все в матрицу

both = [[a, 1], [b, 2], [c, 3]] 

(что CSV инструменты питона естественно сделать для вас), и перенося

z = list (zip (*both)) 
listA = list (z[0]) # zip gives a tuple, make a list so you can edit 
listB = list (z[1]) 
0

Вы можете использовать читатель Dict и создать список заголовком:

import csv 

result={} 
with open(fn) as f: 
    for line in csv.DictReader(f, delimiter='\t'): 
     for k in line: 
      result.setdefault(k, []).append(line[k].strip()) 

print result 

Печать:

{'var_a': ['a', 'b', 'c'], 'var_b': ['1', '2', '3']}