Python读取JSON批量生成TXT,解决Windows文件名特殊字符报错问题
问题排查
你的代码存在以下几个问题:
- 字段取值错误:你预期的文件名开头是
GGB,对应JSON结构里的data['panel_info']['machine']字段,不是你代码里取的model_name(model_name的值是AIC) - 文件名包含Windows非法字符
::这是你报错的直接原因,需要把panel_barcode里的所有冒号替换为[#] - 漏加
board_barcode值:board_barcode是列表类型,你需要取它的第一个元素拼到文件名末尾,才能得到你预期的NoSerialNumber后缀 - 路径转义问题:Windows路径的
\在Python字符串里是转义符,建议在路径字符串前加r标记为原始字符串避免转义错误 - 冗余代码:
with open上下文管理器会自动关闭文件,不需要手动调用f.close()
修复后的单文件处理代码
import json import os # 路径前加r标记为原始字符串,避免转义问题 input_path = r"C:\Data\Data1\AI.json" output_path = r"C:\index" # 自动创建输出文件夹,不存在就新建,避免路径不存在报错 os.makedirs(output_path, exist_ok=True) with open(input_path, encoding='utf-8') as f: data = json.load(f) # 提取字段并替换非法字符 machine = data['panel_info']['machine'] panel_barcode = data['panel_info']['panel_barcode'].replace(':', '[#]') board_barcode = data['panel_info']['board_barcode'][0] # 拼接文件名 txt_name = f"{machine}[$]{panel_barcode}[$]{board_barcode}.txt" # 用os.path.join拼接路径更安全,兼容不同系统 full_output_path = os.path.join(output_path, txt_name) # 创建空文件 with open(full_output_path, 'w') as f: pass
批量处理版本代码
可以遍历指定根目录下所有子文件夹的JSON文件自动处理:
import json import os # 配置项:存放所有JSON文件的根目录、TXT文件输出目录 json_root_dir = r"C:\Data" output_path = r"C:\index" os.makedirs(output_path, exist_ok=True) # 递归遍历所有子文件夹 for root, dirs, files in os.walk(json_root_dir): for file in files: # 只处理后缀为.json的文件 if file.lower().endswith('.json'): json_path = os.path.join(root, file) try: with open(json_path, encoding='utf-8') as f: data = json.load(f) # 提取处理字段 machine = data['panel_info']['machine'] panel_barcode = data['panel_info']['panel_barcode'].replace(':', '[#]') board_barcode = data['panel_info']['board_barcode'][0] txt_name = f"{machine}[$]{panel_barcode}[$]{board_barcode}.txt" full_output_path = os.path.join(output_path, txt_name) with open(full_output_path, 'w') as f: pass print(f"已生成文件:{txt_name}") except Exception as e: print(f"处理文件{json_path}失败:{str(e)}")
内容的提问来源于stack exchange,提问作者Yzj
相关产品推荐
相关产品推荐

