如何在Python中为现有CSV添加月/日/年格式的日期列
解决JSON转CSV并添加日期列的问题
问题分析
核心问题点:
- 使用
DictWriter写入CSV时未处理表头逻辑,导致Pandas读取时将第一行数据误判为表头,日期列标题位置错乱 - 手动添加表头列表时未正确匹配列结构,造成第一列产品名称丢失
方案一:纯CSV模块实现(推荐,避免多步读写)
直接在写入CSV时完成日期列添加,同时处理表头重复问题:
import json from csv import DictWriter import datetime # 格式化今日日期为月/日/年格式 today_date = datetime.date.today().strftime("%m/%d/%Y") # 定义完整字段列表 fieldnames = ['name', 'price', 'date'] with open('output.json', 'r') as inp, open('output.csv', 'a', newline='') as outp: writer = DictWriter(outp, fieldnames=fieldnames) # 仅当文件为空时写入表头,避免追加时重复输出表头 if outp.tell() == 0: writer.writeheader() # 遍历JSON数据,添加日期后写入CSV for line in inp: row = json.loads(line) row['date'] = today_date writer.writerow(row)
方案二:用Pandas简化操作
利用Pandas直接读取JSON并追加到CSV,代码更简洁:
import pandas as pd import datetime # 读取每行一个JSON对象的文件 df = pd.read_json('output.json', lines=True) # 添加格式化后的日期列 df['date'] = datetime.date.today().strftime("%m/%d/%Y") # 追加到CSV:文件不存在时写表头,存在则跳过表头,不写入索引列 df.to_csv( 'output.csv', mode='a', header=not pd.io.common.file_exists('output.csv'), index=False )
原代码问题说明
- 首次写入
output.csv时未调用writer.writeheader(),导致CSV无表头,Pandas读取时将第一行数据当作表头,后续添加日期列后结构混乱 - 手动指定
headerList时未与实际数据列对应,且未处理追加逻辑,造成列匹配错误丢失数据
内容的提问来源于stack exchange,提问作者Red
相关产品推荐
相关产品推荐

