2015-03-25 49 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 2015-03-25 04:22:15

回答

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的List - 有沒有黑魔法做,或者,讓我明確地使用int地方出現需要)。

0

您是否檢出了附帶python的csv工具?這些可以幫助縮減代碼。

此外,就複雜性而言,迭代每個元素是最好的。如果它更容易,你可以嘗試加載一切都變成矩陣

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

(這是Python的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

您可以使用字典閱讀器和創建列表由標頭:

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']} 
相關問題