Python中CSV时间转datetime对象遇ValueError问题求助
问题原因
你的CSV文件第一行是表头(内容为Operation Date),但代码直接遍历所有行,第一次循环时row[0]拿到的是表头文本,不是符合ISO 8601格式的时间字符串,因此datetime.strptime解析失败,抛出ValueError。
解决方法
1. 跳过表头行
在循环前调用next(reader)跳过第一行表头,修正后的代码:
import datetime import csv with open('ledger.csv', 'r') as csv_file: reader = csv.reader(csv_file) next(reader) # 跳过表头行 for row in reader: # 解析时间字符串 dt = datetime.strptime(row[0], "%Y-%m-%dT%H:%M:%S.%fZ") print(dt) # with语句会自动关闭文件,无需手动调用csv_file.close()
2. 更简洁的ISO 8601解析方式
Python 3.7+支持datetime.fromisoformat,可以更简洁处理ISO格式,只需把末尾的Z替换为+00:00(代表UTC时区):
import datetime import csv with open('ledger.csv', 'r') as csv_file: reader = csv.reader(csv_file) next(reader) for row in reader: time_str = row[0].replace('Z', '+00:00') dt = datetime.datetime.fromisoformat(time_str) print(dt)
补充说明
- 你提供的CSV示例未显示表头,但错误信息明确证明文件存在
Operation Date这一行,这是CSV文件常见的结构(第一行定义列名)。 with语句会自动管理文件资源,代码块执行完毕后会自动关闭文件,无需手动调用close()方法。
内容的提问来源于stack exchange,提问作者Arash Koushkebaghi
相关产品推荐
相关产品推荐

