如何使用Python批量修改JSON文件中id字段为自增整数类型
解决方案
方案1:逐行正则处理(适合超大文件,内存占用低,基于你现有代码修改)
你目前的逐行正则思路非常适合大体积文件处理,不会一次性加载整个文件到内存,修改后可直接实现需求:
import re # 输入输出分两个文件操作,避免原文件被误改导致数据丢失 with open("new 2.txt", "r", encoding="utf-8") as in_file, open("processed_id.json", "w", encoding="utf-8") as out_file: for line in in_file: # 正则匹配id字段,捕获数字部分;如果实际id确实存在单字母前缀,可将正则改为 r'"id": "[a-zA-Z]?(\d+)"' processed_line = re.sub( r'"id": "(\d+)"', lambda match: f'"id": {int(match.group(1)) + 1}', line ) out_file.write(processed_line)
注意:如果你的id存在前导字母且需要保留,那最终id仍为字符串类型,不符合去引号转数字的要求,可根据实际场景调整替换逻辑。
方案2:JSON库原生处理(适合格式标准的中小体积文件,无正则误匹配风险)
如果你的JSON文件格式完全合法,且文件大小在内存可承受范围内,用JSON库直接读写更稳妥,不会误匹配到其他字段中类似"id": "xxx"的内容:
import json with open("new 2.txt", "r", encoding="utf-8") as f: json_data = json.load(f) for item in json_data: # 自动提取id中的数字部分,兼容带前导字母的id格式 id_num = int("".join(filter(str.isdigit, item["id"]))) item["id"] = id_num + 1 with open("processed_id.json", "w", encoding="utf-8") as f: # indent=4保留格式化缩进,ensure_ascii=False避免中文乱码 json.dump(json_data, f, indent=4, ensure_ascii=False)
内容的提问来源于stack exchange,提问作者Printer
相关产品推荐
相关产品推荐

