如何用Python按日期(从旧到新)排序带类型行的通用CSV文件?
解决Python对带类型行的CSV按日期排序的问题
没问题,我来帮你搞定这个CSV排序的需求!你的CSV文件比较特殊,前两行是列名和变量类型,之后才是数据行,所以排序的时候要保留前两行,只对数据部分按日期从旧到新排序。下面是具体的实现步骤和代码:
实现思路
- 先读取CSV文件,把前两行(列名行、类型行)单独保存,剩下的是实际数据行
- 对数据行,根据
Time列的日期字符串转换为datetime对象,以此作为排序依据 - 将排序后的数据行和前两行合并,重新写入CSV文件
完整代码
import csv from datetime import datetime # 输入文件路径和输出文件路径,根据你的实际路径修改 input_file = "your_input.csv" output_file = "sorted_output.csv" # 读取CSV内容 with open(input_file, 'r', newline='') as f: reader = csv.reader(f) # 提取前两行:列名和类型行 header = next(reader) type_row = next(reader) # 读取所有数据行 data_rows = list(reader) # 按日期从旧到新排序数据行 # 日期格式是 DD-Mon-YY(比如20-May-15),用'%d-%b-%y'解析成可比较的datetime对象 data_rows.sort(key=lambda row: datetime.strptime(row[0], '%d-%b-%y')) # 将排序后的内容写入新CSV with open(output_file, 'w', newline='') as f: writer = csv.writer(f) writer.writerow(header) writer.writerow(type_row) writer.writerows(data_rows)
关键细节说明
- 日期解析格式:
%d对应两位日期,%b对应缩写月份(比如May),%y对应两位年份,完美匹配你CSV里的日期格式 - 排序逻辑:用
datetime对象作为排序依据,能确保日期按照真实的时间顺序排列,而不是字符串的字典序 - 保留前两行:通过
next(reader)单独读取前两行,排序后依然放在文件最开头,不会破坏原有的文件结构
运行这段代码后,你会得到一个新的CSV文件,里面的数据已经按日期从旧到新排好序啦!
内容的提问来源于stack exchange,提问作者gkuhu
相关产品推荐
相关产品推荐

