使用 DictReader 访问 CSV 的第三列时出现 KeyError [重复]

Posted

技术标签:

【中文标题】使用 DictReader 访问 CSV 的第三列时出现 KeyError [重复]【英文标题】:Getting KeyError when accessing third column of CSV using DictReader [duplicate] 【发布时间】:2022-01-23 05:05:39 【问题描述】:

我尝试使用 Python 按日期对 csv 文件进行排序(最新条目优先)。 csv 文件中包含日期的列是 csv 文件的第三列。

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

密钥错误: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 为您提供每一行的字典,您需要使用列标题作为键来访问它,而不是整数索引。 如果你想以元组的形式访问行,你不应该使用DictReader 您的 csv 文件是否有标题行?你能发布一个2-3行的样本吗? 【参考方案1】:

刚刚阅读错误,keyerror: 2,我的目光转向了,datetime.strptime(row[2])

您正在尝试为 DictReader 使用基于 0 的 列索引号,它需要 列名(从第一行(行)派生文件中的数据,它应该是一个“标题”)。

所以,将row[2] 换成row['third_column_name'],你应该会很好。

如果您没有标头,请使用csv.reader()

【讨论】:

非常感谢您的 cmets 让我能够更正我的 Python 脚本 :) @mollieda,如果这有帮助,请接受(复选标记),如果您愿意,也可以投票:)

以上是关于使用 DictReader 访问 CSV 的第三列时出现 KeyError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用jmeter测试的时候,需要读取csv文件的第三列,csv文件名为test.csv,如何使用函数读取?

带有 UTF-8 数据的 Python CSV DictReader

如何使用 csv.DictReader 在 django 中上传和读取 csv 文件?

当第二列和第三列与数字模式匹配时打印整行

Python 3.2 在 csv.DictReader 中跳过一行

从 csv.DictReader 中查找字典值