0

当字段未按预期格式化时,我正在尝试解决 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()))

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

我错过了“更新”,我可以写一个新列表。只是有点沮丧。

4

3 回答 3

5

为避免遍历整个文件,请修改fieldnamesDictReader 上的属性,如下所示:

f = open(sourceFile,'rb')
reader = csv.DictReader(f, dialect='excel')
reader.fieldnames = [name.upper() for name in reader.fieldnames]
于 2016-08-23T21:02:34.857 回答
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
于 2013-04-07T18:02:02.280 回答
1

如果你想要一个新列表:

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

或者,如果您想一次制作一个 dict:

for r in reader:
    r = {{k.upper(): v for k, v in r.iteritems()}
    # use r
于 2013-04-07T17:59:28.297 回答