Python循环按顺序处理JSON文件解决image字段赋值错误问题
问题根因
os.listdir()返回的文件名顺序由操作系统文件系统规则决定,不会默认按文件名的数字大小排序,运行顺序不可控- 原有代码没有从当前处理的JSON文件名中提取对应编号,而是使用了循环自增的计数变量,直接导致文件和编号错配
修复方案
解决思路是直接从每个JSON文件的文件名中提取对应数字作为图片URL的后缀,完全不依赖文件遍历顺序,从根源避免错配。修正后的代码如下:
import json import os folderPath = r'/path/FolderWithJson/' for filename in os.listdir(folderPath): # 跳过非JSON格式的文件 if not filename.endswith(".json"): continue # 提取文件名中的数字编号:去掉.json后缀后转整数 file_num = int(filename.rsplit('.', 1)[0]) file_path = os.path.join(folderPath, filename) # 读取原有JSON内容 with open(file_path, 'r', encoding='utf-8') as f: data = json.load(f) # 修改image字段 data['image'] = f"https://weburlofnewimage/{file_num}.png" # 直接覆盖写入新内容,无需先删除原文件 with open(file_path, 'w', encoding='utf-8') as f: json.dump(data, f, indent=4) print(f"处理完成:{filename},对应图片URL编号为{file_num}")
额外优化说明
- 去掉了原有先删除文件再新建写入的冗余逻辑,
w模式打开文件会直接覆盖原有内容,操作更安全 - 新增了编码声明,避免不同系统下读写JSON出现乱码
- 所有匹配逻辑完全和文件名绑定,不管遍历顺序是什么样,都不会出现编号错配的问题
内容的提问来源于stack exchange,提问作者Meowsleydale
相关产品推荐
相关产品推荐

