You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按日期排序CSV文件代码报错,如何排查问题并解决?

问题原因
  • CSV文件携带UTF-8 BOM标记:报错内容中的是UTF-8 BOM的字符乱码表现,多出现于Windows系统生成的CSV文件,默认的open读取逻辑不会自动过滤该标记,导致第一行的列名被附加了多余字符。
  • 未跳过表头行:csv.reader会将表头行作为普通数据行处理,你定义的时间格式字符串无法匹配列名字符串,直接触发格式匹配错误。
可行解决方案

方案1:使用标准csv模块修复

打开文件时指定编码自动处理BOM,单独提取表头后仅对数据行做排序,示例代码如下:

import csv
from datetime import datetime
import locale
# 若系统区域非英文,需加这行保证能识别英文月份缩写
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')

csv_file_path = "你的csv文件路径"
with open(csv_file_path, 'r', encoding='utf-8-sig', newline='') as f:
    reader = csv.reader(f)
    # 提取表头
    header = next(reader)
    # 仅对数据行排序
    sorted_rows = sorted(reader, key=lambda x: datetime.strptime(x[0], "%d %b %Y %H:%M"))

# 若需要将结果写回文件
with open("sorted_result.csv", 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    writer.writerows(sorted_rows)

以上代码兼容Python 3.8.5版本,无需额外安装第三方依赖。

方案2:使用pandas简化处理

如果允许使用第三方库,pandas可以自动处理BOM、表头识别和日期解析,代码更简洁不易出错:

import pandas as pd

# 读取时直接解析日期列
df = pd.read_csv("你的csv文件路径", parse_dates=["datetime_period"])
# 按日期列排序
df_sorted = df.sort_values("datetime_period")
# 导出结果,不保存索引列
df_sorted.to_csv("sorted_result.csv", index=False)

内容的提问来源于stack exchange,提问作者user3848207

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:57:07