Python阅读器是否忽略列?

Python阅读器是否忽略列?,python,Python,如果我使用CSV.dictReader在CSV中读取,我如何让它忽略CSV中的某些列 比如说, "id","name","address","number","created" "123456","someName","someAddress","someNumber","2003-5-0294" 我只想使用读卡器获取id和名称,丢弃并忽略其余部分。我尝试使用字段名,但它仍然读入并将其设置为“无”。我注意到csv.DictWriter有一个“忽略”功能,但DictReader似乎没有。我希望有

如果我使用CSV.dictReader在CSV中读取,我如何让它忽略CSV中的某些列

比如说,

"id","name","address","number","created"
"123456","someName","someAddress","someNumber","2003-5-0294"
我只想使用读卡器获取id和名称,丢弃并忽略其余部分。我尝试使用字段名,但它仍然读入并将其设置为“无”。我注意到csv.DictWriter有一个“忽略”功能,但DictReader似乎没有。我希望有一种更优雅的方式来实现这一点,而不是只是阅读然后只将我想要的列写入另一个CSV,然后使用DictReader阅读该CSV以进行进一步处理


谢谢大家

读取每一行,然后创建一个包含所需键的dict列表

[{'id':r['id'], 'name':r['name']} for r in mydictreader]

这个简单的发电机就可以了

def dict_filter(it, *keys):
    for d in it:
        yield dict((k, d[k]) for k in keys)
像这样使用它:

dreader = [{'id':1, 'name':'Bob', 'other_stuff':'xy'},
           {'id':2, 'name':'Jen', 'other_stuff':'xx'}]

for d in dict_filter(dreader, 'id', 'name'):
    print d
给出:

{'id': 1, 'name': 'Bob'}
{'id': 2, 'name': 'Jen'}

其他发布的解决方案从DictReader返回的较大的完全填充的dict构建新的较小dict

这样的东西是必要的,因为DictReader API是特意设计的,不跳过字段。以下是来源的摘录:

    # unlike the basic reader, we prefer not to return blanks,
    # because we will typically wind up with a dict full of None
    # values
    while row == []:
        row = self.reader.next()
    d = dict(zip(self.fieldnames, row))
您可以看到,每个字段名都被分配到字典,而不进行筛选

FWIW,让你自己的DictReader变体达到你想要的行为并不难。根据现有的模型对其进行建模

    # unlike the basic reader, we prefer not to return blanks,
    # because we will typically wind up with a dict full of None
    # values
    while row == []:
        row = self.reader.next()
    d = dict(zip(self.fieldnames, row))