DictReader将键更改为上部

时间:2013-04-07 17:53:46

标签: python python-2.7 csv

我正在尝试在字段未按预期格式化时解决dictreader中的导入问题,强制所有字段名称为大写(或小写)将解决该问题。

这是我正在使用的基本代码,但我似乎无法更新dict中的行。

f = open(sourceFile,'rb')
reader = csv.DictReader(f, dialect='excel')
for r in reader:
    r.update(dict((k.upper(), v) for k, v in r.iteritems()))

所需的输出是相同的词典列表,但所有键都设置为大写。

我错过了'更新',我写的很好。只是有点沮丧。

3 个答案:

答案 0 :(得分:3)

为避免迭代整个文件,请修改DictReader上的fieldnames属性,如:

f = open(sourceFile,'rb')
reader = csv.DictReader(f, dialect='excel')
reader.fieldnames = [name.upper() for name in reader.fieldnames]

答案 1 :(得分:2)

您可以使用生成器为每行返回一个大写的键字典:

def uppercased(reader):
    for r in reader:
        yield {k.upper(): v for k, v in r.iteritems()}

然后将其用作:

with open(sourceFile,'rb') as f:
    reader = csv.DictReader(f, dialect='excel')
    for r in uppercased(reader):
        # use `r` like you normally would

答案 2 :(得分:1)

如果你想要一个新的清单:

new = [{k.upper(): v for k, v in r.iteritems()} for r in reader]

或者如果你想一次制作一个词典:

for r in reader:
    r = {{k.upper(): v for k, v in r.iteritems()}
    # use r