使用 DictReader 读取 CSV 文件时,访问第三列出现 KeyError。

3

我试图使用Python按日期排序csv文件(最新的条目排在前面)。包含日期的列是csv文件的第三列。

当我运行下面的代码时,我得到以下错误信息:

KeyError: 2

请提供指导方针以纠正我的脚本:

import csv
import os
from csv import writer
from datetime import datetime

with open("data.csv", newline="") as csvfile:
spamreader = csv.DictReader(csvfile, delimiter=",")
sortedlist = sorted(spamreader, key=lambda row: datetime.strptime(row[2]), reverse=False)

with open("sortdata.csv", "w") as f:
    fieldnames = ["detection_date"]
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    for row in sortedlist:
        writer.writerow(row)

DictReader 会为每一行提供一个字典,你需要使用列标题作为键来访问它,而不是使用整数索引。 - mkrieger1
如果您想将行作为元组访问,则不应使用DictReader - mkrieger1
你的 CSV 文件是否有标题行?你能发一份带有 2-3 行的样本吗? - not_speshal
1个回答

1
仅从错误信息“keyerror: 2”中,我的注意力就被吸引到了“datetime.strptime(row[2])”这一行。你试图在DictReader中使用基于0的列索引号,而它期望一个列名(该列名源自文件中的第一行数据(行),即期望为“标题”)。因此,请将“row[2]”替换为“row ['third_column_name']”,然后您就可以完成了。如果没有标题,请使用“csv.reader()”。

非常感谢您的评论,让我能够纠正我的Python脚本 :) - mollieda
@mollieda,如果这篇文章对你有帮助,请点击接受(勾选)并且如果你喜欢的话,也可以点赞 :) - Zach Young

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接