将csv打印到控制台

时间:2019-05-07 18:39:34

标签: python

我正在读取包含十行的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使用。

3 个答案:

答案 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