我正在尝试在字段未按预期格式化时解决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()))
所需的输出是相同的词典列表,但所有键都设置为大写。
我错过了'更新',我写的很好。只是有点沮丧。
答案 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