使用 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 文件?