如何通过列表获取CSV中的相应值

时间:2017-11-22 08:16:13

标签: python-2.7 list csv

这是我的问题,我倾向于通过列表在CSV中获得相应的值。例如:

我有一个像

这样的清单
namelist=[1,2]

和csv喜欢

name    id    value
 1       a     aaa
 2       b     bbb
 3       c     ccc

我倾向于使用列表中的每个元素来查找CSV中的相应值。例如:1-aaa; 2-bbb。这就是我现在尝试的:

with open('1.csv','rb') as f:
reader = csv.DictReader(f)
for i in namelist:
    for row in reader:
        if row['name'] == namelist[i]: 
            print row['value']

但我一无所获。我该怎么办呢?  提前谢谢!

2 个答案:

答案 0 :(得分:0)

首先,你应该在""之后使用缩进。条款。另一件可能导致问题的事情可能就是这部分代码:

for i in namelist:  # in that case if namelist = [1,2] i will be 1 or 2, but you need 0,1

如果列的顺序总是如此(我的意思是名称,id,值),你也可以尝试这个解决方案:

namelist=[1,2]

with open('1.csv','rb') as f:
    reader = list(csv.reader(f))
    for row in reader:
        for i in range(len(namelist)): # or if row[0] in namelist: 
            if row[0] == namelist[i]:
            print row[2]

答案 1 :(得分:0)

一些事情:

  1. csv.DictReader将项目读取到string:string的字典,而不是string:int。所以,我将你的名单改为字符串列表。或者,您可以将row['name']转换为整数,但我认为以这种方式转换您的名单会更加通用。

  2. 检查if row['name'] in namelist:然后循环遍历整个csv文件以查找名单中的每个元素会快得多。

  3. 代码:

    import csv
    
    namelist=['1','2']
    with open('1.csv','rb') as f:
        reader = csv.DictReader(f)
        for row in reader:
            if row['name'] in namelist: 
                print row['value']
    

    输出:

    aaa
    bbb