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
相关产品推荐
相关产品推荐

