我正在读取包含十行的csv文件,以将其传输到JSON,控制台输出如下。附有Python代码。第一步是将csv数据打印到控制台,并且出现以下错误。
发生语法错误,但是在修复错误之后,该错误已经开始。
data = {}
with open(csvFilePath) as csvFile:
csvReader = csv.DictReader(csvFile)
for csvRow in csvReader:
hmid = csvRow["hmid"]
data[hmid] = csvRow
控制台输出:
python csvjson.py
Traceback (most recent call last):
File "csvjson.py", line 12, in <module>
hmid = csvRow["hmid"]
KeyError: 'hmid'
预期输出:
将CSV数据打印出来以供Conole使用。
答案 0 :(得分:0)
KeyError exception表示您所请求的密钥在该词典中不存在。
如果cv的每一行中都不存在“ hmid”列,请考虑使用dict.get()方法。如果字典中没有键而不是KeyError,则将返回None。
或者,您可以捕获该KeyError并跳过该行。看起来像这样。
data = {}
with open(csvFilePath) as csvFile:
csvReader = csv.DictReader(csvFile)
for csvRow in csvReader:
try:
data[csvRow["hmid"]] = csvRow
except KeyError:
pass
或在继续之前检查键是否在词典中。
data = {}
with open(csvFilePath) as csvFile:
csvReader = csv.DictReader(csvFile)
for csvRow in csvReader:
if "hmid" not in csvRow.keys():
continue
data[csvRow["hmid"]] = csvRow
答案 1 :(得分:0)
我制作了以下文件“ test.csv”:
hmid,first_name,last_name,email,gender,passport_number,departure_city,arrival_city,aircraft_type
1,Lotstring,Duobam,anatwick0@samsung.com,Female,7043833787,Changtang,Tours,B737
2,Rover,Red,rr@nowhere.com,Female,7043833787,Changtang,Tours,B737
将您的代码粘贴到Python 2.7中,效果很好。 data
有两行。
也许您的文件存在终结器问题。
答案 2 :(得分:0)
CSV文件的文件开头有一个BOM(字节顺序标记),因此当您打开文件时,需要在打开的文件上指定encoding ='utf-8-sig'。这是您的代码,已更正:
data = {}
with open(csvFilePath, encoding='utf-8-sig') as csvFile:
csvReader = csv.DictReader(csvFile)
for csvRow in csvReader:
hmid = csvRow["hmid"]
data[hmid] = csvRow