我偶然发现了一个我似乎无法找到答案的问题。我正在使用csv.DictReader
读取csv文件的内容,并根据该信息构建一个namedtuples列表。但是,在运行它时,最终结果是一个空列表。
from collections import namedtuple
import csv
nt = namedtuple('suminfo', 'a, b, c')
checklist = ['check1', 'check2', 'check3']
with open('test.csv', 'r') as csv_file:
csv_rows = csv.DictReader(csv_file, delimiter='\t')
tups = [nt(row['first'], row['second'], row['third'])
for row in csv_rows if row['first'] in checklist]
我还尝试了一个典型的行正常循环,然后是一个附加了一个namedtuple的列表,这似乎工作得很好。
为什么listcomprehension的行为不符合预期?谢谢你的时间。
答案 0 :(得分:2)
列表理解对我有用。我使用了这个测试数据(test.csv):
first second third
check1 1 1
check2 2 2
check3 3 3
check4 4 4
值由制表符分隔。当我运行你的代码时,
nt = namedtuple('suminfo', 'a, b, c')
checklist = ['check1', 'check2', 'check3']
with open('test.csv', 'r') as csv_file:
csv_rows = csv.DictReader(csv_file, delimiter='\t')
tups = [nt(row['first'], row['second'], row['third'])
for row in csv_rows if row['first'] in checklist]
print(tups)
我得到以下结果:
>>> [suminfo(a='check1', b='1', c='1'), suminfo(a='check2', b='2', c='2'), suminfo(a='check3', b='3', c='3')]