如何使用DictReader指定要标记的字段名?

时间:2015-07-30 20:56:13

标签: python python-2.7

我使用DictReader指定字段名,但并非所有列都有用,甚至不包含数据。如何指定要标记的列?这是我的代码:

my_tot_reader = csv.DictReader(tot_file, delimiter=';', restkey='Empty Field')
            my_tot_reader.fieldnames = ("Date", 
                                        "Pivot ID", 
                                        "Empty Field", 
                                        "Empty Field", 
                                        "Empty Field", 
                                        "Empty Field", 
                                        "Empty Field", 
                                        "Status")

1 个答案:

答案 0 :(得分:2)

您只需对要忽略的字段重复使用相同的密钥即可;你最终会在行字典中输入一个这样的条目,其中包含一个列值。您必须提供足够的字段来覆盖 想要包含的最后一列。

我将序列作为关键字参数提供,您可以通过乘法构建元组:

my_tot_reader = csv.DictReader(
    tot_file, delimiter=';', restkey='ignored',
    fieldnames=("Date", "Pivot ID") + ('ignored',) * 5 + ('status',)) 

我改为使用字段名'ignored'

使用引擎dict(zip(fields, columns)),只会产生与匹配的列和字段一样多的(column, field)组合;如果fields短于columns,则忽略其余列。重复的字段名称只会导致一个字典密钥存活:

>>> columns = ('some_date', 'some_id', 'foo', 'bar', 'baz', 'spam', 'eggs', 'some_status', 'qux', 'flub')
>>> fields = ("Date", "Pivot ID") + ('ignored',) * 5 + ('status',)
>>> dict(zip(fields, columns))
{'Date': 'some_date', 'Pivot ID': 'some_id', 'ignored': 'eggs', 'status': 'some_status'}

然后,将绝对列作为列表分配给restkey键。如果您想在其他地方使用行字典,请不要在结果行中使用'ignored'键,或者使用del row['ignored']将其删除。