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的新知识:)非常感谢!