如何用Python优雅地重排CSV文件中的日期列并转换日期格式?
Pythonic 方法转换 CSV 日期格式并调整列顺序
要搞定你这个CSV格式转换需求,最符合Python风格的方式就是用标准库的csv和datetime模块来实现——不需要额外安装第三方包,代码简洁直观,还完全符合PEP8规范。
标准库实现方案(轻量首选)
这个方案适合大多数场景,尤其是处理大文件时,逐行读写不会占用过多内存:
import csv from datetime import datetime # 替换成你实际的输入输出文件路径 INPUT_PATH = "input.csv" OUTPUT_PATH = "output.csv" def reformat_date(date_str): """把YYYY-MM-DD格式的日期字符串转为DD/MM/YYYY""" return datetime.strptime(date_str, "%Y-%m-%d").strftime("%d/%m/%Y") # 用上下文管理器自动处理文件开闭 with open(INPUT_PATH, 'r', newline='') as infile, open(OUTPUT_PATH, 'w', newline='') as outfile: csv_reader = csv.reader(infile) csv_writer = csv.writer(outfile) # 遍历每一行,重构列顺序并转换日期 for row in csv_reader: # 构造新行:转换后的日期 + 原前两列 + 原第四列 new_row = [reformat_date(row[2])] + row[:2] + row[3:] csv_writer.writerow(new_row)
为什么这个方案很Pythonic?
- 依赖标准库:不需要额外引入第三方工具,保证代码的可移植性和轻量性;
- 上下文管理器:
with语句自动处理文件的打开和关闭,避免资源泄漏,这是Python推荐的资源管理方式; - 简洁的列表操作:用列表拼接直接调整列顺序,逻辑一目了然,没有冗余代码;
- 单一职责函数:
reformat_date专注于日期格式转换,符合模块化设计思路; - 迭代式处理:逐行读取写入,即使是GB级别的大文件也能轻松处理,不会爆内存。
大数据量/复杂场景可选:Pandas方案
如果你的数据量极大,或者需要后续做更多表格操作,用pandas的写法同样很Pythonic,代码更简洁:
import pandas as pd # 读取CSV,因为原文件没有表头,指定header=None df = pd.read_csv("input.csv", header=None) # 转换日期格式并赋值到新的第一列 df[0] = pd.to_datetime(df[2]).dt.strftime("%d/%m/%Y") # 重新排列列顺序:新第一列 + 原前两列 + 原第四列 df = df[[0, 1, 2, 3]] # 写入输出文件,不保存索引和表头 df.to_csv("output.csv", header=None, index=False)
不过如果只是单纯的格式转换,标准库的方案更贴合"Pythonic"的轻量原则哦。
内容的提问来源于stack exchange,提问作者shongyang low
相关产品推荐
相关产品推荐

