使用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位置並將其附加到這些空列表中。
使用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位置並將其附加到這些空列表中。
如果你有足夠的內存,你可以得到更多的優雅:
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
地方出現需要)。
您是否檢出了附帶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])
您可以使用字典閱讀器和創建列表由標頭:
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']}
是[pandas.read_csv](http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.parsers.read_csv.html)不是一個可行的解決方案嗎? – cbare 2015-03-25 04:22:15