You need to enable JavaScript to run this app. Python按第二列日期批量排序CSV内容 支持覆盖或另存
优惠活动
大模型
产品
解决方案
定价
更多

Python按第二列日期批量排序CSV内容 支持覆盖或另存

CSV 日期排序可实现方案

原代码未生效的核心问题

  • 直接将CSV第二列的日期字符串做字典序排序、同时开启了reverse=True反向排序,既无法准确识别DD/MM/YYYY格式的真实日期先后,排序方向也和需求完全相反
  • 仅将排序结果存在内存字典中,没有任何写回文件的逻辑,不会对原始文件做任何修改,也不会生成新的输出文件
  • 未实现需求要求的“优先覆盖原文件、覆盖失败则存入Sorted目录”的分支逻辑

修正后可直接运行的代码

import csv
import glob
import os
from datetime import datetime

# 路径配置
ORIGINAL_FOLDER = "Original"
SORTED_FOLDER = "Sorted"
# 匹配CSV中使用的DD/MM/YYYY日期格式
DATE_PARSE_FORMAT = "%d/%m/%Y"

# 提前创建Sorted存储目录,不存在则自动生成
os.makedirs(SORTED_FOLDER, exist_ok=True)

# 遍历Original目录下所有CSV文件
for csv_full_path in glob.glob(os.path.join(ORIGINAL_FOLDER, "*.csv")):
    # 读取文件全部行
    with open(csv_full_path, "r", encoding="utf-8") as file_handle:
        csv_reader = csv.reader(file_handle, delimiter=",")
        all_rows = list(csv_reader)

    # 按第二列日期升序排序:将日期字符串转为可比较的时间对象作为排序键
    sorted_rows = sorted(
        all_rows,
        key=lambda single_row: datetime.strptime(single_row[1].strip(), DATE_PARSE_FORMAT)
    )

    # 优先尝试覆盖原文件
    try:
        with open(csv_full_path, "w", encoding="utf-8", newline="") as write_handle:
            csv_writer = csv.writer(write_handle)
            csv_writer.writerows(sorted_rows)
        print(f"排序完成,已覆盖原文件:{csv_full_path}")
    # 遇到无权限、文件被占用等无法写入原文件的情况
    except PermissionError:
        # 保存到Sorted目录,保留原文件名
        save_path = os.path.join(SORTED_FOLDER, os.path.basename(csv_full_path))
        with open(save_path, "w", encoding="utf-8", newline="") as write_handle:
            csv_writer = csv.writer(write_handle)
            csv_writer.writerows(sorted_rows)
        print(f"原文件无写入权限,排序结果已保存至:{save_path}")

功能匹配说明

  • 排序逻辑完全匹配示例规则:解析后按真实日期先后升序排列,最早日期的行排在最前,跨月、跨年的日期排序不会出现错位
  • 写入逻辑完全匹配需求优先级:先尝试覆盖原文件,遇到权限不足、文件被占用等无法覆盖的场景,自动将排序后的文件存入Sorted独立目录
  • 自动适配运行环境:写入时添加newline=""参数,避免Windows系统下生成的CSV文件出现多余空行;Sorted目录自动创建,无需手动提前配置
  • 兼容示例中的无表头CSV格式,不需要额外调整读取逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 22:57:03