python处理缺少键的读取器

python处理缺少键的读取器,python,csv,Python,Csv,此脚本工作正常,直到我找到一个空单元格: import csv,time,string,os,requests dw = "\\\\network\\folder\\btc.csv" inv_fields = ["id", "rsl", "number", "GP%"] with open(dw) as infile, open("c:\\upload\\log.csv", "wb") as outfile: r = csv.DictReader(infile) w = cs

此脚本工作正常,直到我找到一个空单元格:

import csv,time,string,os,requests
dw = "\\\\network\\folder\\btc.csv"

inv_fields = ["id", "rsl", "number", "GP%"]

with open(dw) as infile, open("c:\\upload\\log.csv", "wb") as outfile:
    r = csv.DictReader(infile)
    w = csv.DictWriter(outfile, inv_fields, extrasaction="ignore")
    r = (dict((k, v.strip()) for k, v in row.items() if v) for row in r)

    wtr = csv.writer( outfile )    
    wtr.writerow(["id", "resale", "number", "percentage"])
    for i, row in enumerate(r, start=1):
        row['id'] = i
        row['GP%'] = row['GP%'].replace("%","")
        w.writerow(row)

print "file successfully saved"
脚本在这一行失败:

row['GP%'] = row['GP%'].replace("%","")
通过将
print i
添加到循环中,我可以看到在.csv文件的行中该输入值为空时,它失败了。如何将没有值的单元格带入这个等式

python错误:

Traceback (most recent call last):
  File "backlog.py", line 80, in <module>
    row['GP%'] = row['GP%'].replace("%","")
KeyError: 'GP%'
回溯(最近一次呼叫最后一次):
文件“backlog.py”,第80行,在
行['GP%']=行['GP%']。替换(“%”,“”)
键错误:“GP%”

在尝试更新其值之前,您可以检查键
'GP%'
是否在
行中。如果不是,您可以指定一个默认值,以便与该
id
相关的条目在输出文件中为空:

for i, row in enumerate(r, start=1):
    row['id'] = i
    if 'GP%' in row:
         row['GP%'] = row['GP%'].replace('%','')
    else:
         row['GP%'] = ''
    w.writerow(row)
或者使用
row
get
方法设置默认值:

for i, row in enumerate(r, start=1):
    row['id'] = i
    row['GP%'] = row.get('GP%', '').replace('%','')
    w.writerow(row)
您可以使用第行中的“GP%”来检查第行中是否存在
GP%

或者,您可以捕获异常:

try:
    row['GP%'] = row['GP%'].replace("%","")
except KeyError as ke:
    print "Error:{0}, row info:{1}".format(ke, row)

你说失败是指错误<代码>替换
如果在空白字符串中也找不到该字符串,则不会引发错误。您可以检查行是否为空,如果为空,请使用
继续
跳过该行line@haifzhan整行不是空的-只有这个字段。用空值替换不是错误的原因。如果您确实阅读了错误消息,您会发现它是由以下事实引起的:
GP%
不是您的
dict
@m_callens的有效密钥。我现在明白了。我将更新问题标题以反映这一点。这很有魅力。我每天都会学到一些关于python的新知识:)非常感谢!