如何用Python替换CSV每行JSON的seqnbr字段为随机值(保留None)
问题解决:替换CSV中JSON字段的seqnbr值
原代码存在的问题
- 采用追加模式写入原文件,只会在文件末尾新增内容,无法覆盖原数据
- 用正则直接替换JSON字符串,容错性差(比如字段前后空格变化、格式微调都会导致匹配失败)
- 未保留表头,写入时没有用分隔符拼接行,会破坏CSV格式
- 循环内重复打开/关闭文件,效率低且易引发IO异常
修复方案:用JSON解析+临时文件实现可靠更新
使用csv模块处理CSV读写,结合json模块解析修改JSON字段,通过临时文件过渡避免原数据损坏:
import csv import json import random import os def update_seqnbr(): filename = 'input.csv' temp_file = 'temp_input.csv' # 读取原文件并处理数据,写入临时文件 with open(filename, 'r', newline='') as infile, open(temp_file, 'w', newline='') as outfile: reader = csv.reader(infile, delimiter='|') writer = csv.writer(outfile, delimiter='|') # 保留表头 header = next(reader) writer.writerow(header) for row in reader: json_msg = row[3].strip() try: # 转换单引号JSON为标准双引号格式,解析为字典 data = json.loads(json_msg.replace("'", '"')) # 仅当seqnbr不为None时替换为随机数 if data.get('seqnbr') is not None: data['seqnbr'] = random.randint(500, 999) # 转回单引号格式匹配原数据 updated_msg = str(data).replace('"', "'") row[3] = updated_msg except json.JSONDecodeError: # 解析失败时保留原内容,避免程序中断 pass # 写入处理后的行 writer.writerow(row) # 原子替换原文件,保证数据安全 os.replace(temp_file, filename) # 调用函数执行更新 update_seqnbr()
方案优势
- 数据安全:用临时文件过渡,处理完成后再替换原文件,避免中途出错导致原数据损坏
- 可靠性高:通过JSON解析修改字段,比正则匹配更能适应JSON格式的变化
- 格式保留:用
csv读写器保证分隔符和表头的正确性,不会破坏原CSV结构 - 容错性强:捕获JSON解析异常,解析失败时自动保留原内容
内容的提问来源于stack exchange,提问作者Balaji Venkatachalam
相关产品推荐
相关产品推荐

