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

如何用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()

方案优势

  1. 数据安全:用临时文件过渡,处理完成后再替换原文件,避免中途出错导致原数据损坏
  2. 可靠性高:通过JSON解析修改字段,比正则匹配更能适应JSON格式的变化
  3. 格式保留:用csv读写器保证分隔符和表头的正确性,不会破坏原CSV结构
  4. 容错性强:捕获JSON解析异常,解析失败时自动保留原内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:54:55