为什么csv.Dictreader只读取第一行/列?

时间:2018-09-10 14:06:10

标签: python-3.x csv keyerror

我想将csv文件读取到我的Tkinter应用程序中,并将文件的内容拆分为不同的小部件。我能够读取第一列的文本并将其输入到正确的输入小部件中,但无法继续。我收到“ KeyError:”异常。

我的示例代码只是一个隔离的块,用于查看我是否可以打印文件内容:

import csv

with open("bible.csv", mode="r") as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        x = row["title"]
        y = row["author"]
        z = row["year"]

错误消息是:

Bible
Traceback (most recent call last):
File "C:/Users/", line 23, in <module>
y = row['author']
KeyError: 'author'

CSV内容就是这样:

title, author, year, others, note
Bible,Many,0,Religion,This is the bible.

有人可以解释为什么它只占用第一个“行”而不继续吗?

非常感谢您的参与!

2 个答案:

答案 0 :(得分:2)

正在读取标头及其初始空格,因此键是" author"而不是"author"。您可以将skipinitialspace格式参数设置为True,以防止出现这种情况

import csv

with open("bible.csv", mode="r") as file:
    csv_reader = csv.DictReader(file, skipinitialspace=True)
    for row in csv_reader:
        x = row["title"]
        print(x)
        y = row['author']
        z = row["year"]

答案 1 :(得分:1)

错误KeyError: 'author'表示密钥"author"row中不存在。果然,如果我们添加print(row),我们将看到:

OrderedDict([('title', 'Bible'), (' author', 'Many'), (' year', '0'), (' others', 'Religion'), (' note', 'This is the bible.')])

因此密钥实际上是" author"而不是"author"。 Patrick Haugh在回答中提供了解决方法。