使用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 :(得分: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
所需的地方。
答案 1 :(得分: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])
答案 2 :(得分:0)
您可以使用dict reader并按标题创建列表:
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']}