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

如何在不修改其他列的前提下转换CSV文件中日期列的日期格式?

Python 自动转换CSV中所有日期列格式(mm/dd/yyyy → yyyy-mm-dd)

需要编写Python脚本处理CSV文件,自动识别所有符合mm/dd/yyyy格式的日期单元格,将其转换为yyyy-mm-dd格式,非日期列/单元格保持原样,最终将结果写入新文件。无法提前知晓日期列的数量和位置。

示例输入(test.csv)

name, dob, gender, joindate
John, 10/21/2000, 1, 09/25/2022
Hannah, 12/31/1980, 2, 09/25/2022
Tom, 02/09/1999, 1, 09/25/2022
Alice, 02/05/1999, 2, 09/21/2022

期望输出(result.csv)

name, dob, gender, joindate
John, 2000-10-21, 1, 2022-09-25
Hannah, 1980-12-31, 2, 2022-09-25
Tom, 1999-02-09, 1, 2022-09-25
Alice, 1999-02-05, 2, 2022-09-21

原代码的问题

原代码存在以下局限性:

  • 仅硬编码处理第一列,无法识别其他位置的日期列
  • 跳过了表头但未写入结果文件,导致输出缺少表头
  • 无异常处理,遇到非日期格式单元格直接抛出错误终止运行
  • 手动调用close()方法,而with语句已经自动处理文件关闭,属于冗余操作

修复后的代码

import csv
from datetime import datetime

def convert_date_format(cell_value):
    """尝试将mm/dd/yyyy格式的字符串转换为yyyy-mm-dd,失败则返回原内容"""
    try:
        # 先去除可能的前后空格
        cleaned_value = cell_value.strip()
        # 解析日期并转换格式
        date_obj = datetime.strptime(cleaned_value, '%m/%d/%Y')
        return date_obj.strftime('%Y-%m-%d')
    except (ValueError, TypeError):
        # 不是目标格式的日期,返回原内容
        return cell_value

# 处理CSV文件
with open('test.csv', 'r', newline='') as source_file, open('result.csv', 'w', newline='') as result_file:
    reader = csv.reader(source_file)
    writer = csv.writer(result_file)
    
    # 写入表头
    header = next(reader)
    writer.writerow(header)
    
    # 处理每一行数据
    for row in reader:
        # 对每个单元格尝试转换日期格式
        converted_row = [convert_date_format(cell) for cell in row]
        writer.writerow(converted_row)

代码说明

  1. 日期转换函数:convert_date_format函数负责单个单元格的格式判断与转换,通过try-except捕获解析失败的情况,确保非日期内容不受影响
  2. 表头处理:使用next(reader)读取表头并直接写入结果文件,保留原文件的列结构
  3. 批量处理所有列:通过列表推导式遍历每行的所有单元格,自动识别并转换符合格式的日期
  4. 文件操作优化:使用with语句管理文件上下文,自动处理文件打开/关闭,避免资源泄漏
  5. 空格处理:转换前去除单元格前后空格,兼容示例中日期值带空格的情况

运行该脚本后,即可得到符合要求的result.csv文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:50:42