使用pathlib遍历目录JSON文件转Pandas DataFrame遇JSONDecodeError
问题分析与解决
你的报错是因为遍历目录时读取了非JSON格式的文件(比如系统隐藏文件、临时文件,像Mac的.DS_Store或Windows的临时缓存文件),或者存在空的JSON文件,这些文件无法被json.loads()解析。单文件测试时你指定了明确的JSON文件,所以没问题,但循环会扫到目录里所有文件。
修复方案
1. 只处理.json后缀的文件
在循环里增加后缀判断,确保只读取JSON格式文件:
2. 增加异常捕获,跳过有问题的文件并排查
加入try-except块,捕获解析错误时打印文件名,方便定位问题文件。
修改后的完整代码:
import pathlib import json import pandas as pd file_dir = "my_jsons_dir" file_paths = pathlib.Path(file_dir) data = [] for file in file_paths.iterdir(): # 只处理后缀为.json的文件,跳过目录和其他格式文件 if file.is_file() and file.suffix == ".json": try: # 读取并解析JSON dict_data = json.loads(file.read_bytes()) # 标准化JSON并转为DataFrame df = pd.json_normalize(dict_data) # pd.json_normalize直接返回DataFrame,无需额外套pd.DataFrame.from_dict data.append(df) except json.JSONDecodeError as e: print(f"解析文件 {file.name} 出错: {e}") continue # 按需合并所有DataFrame final_df = pd.concat(data, ignore_index=True)
额外说明
pd.json_normalize()本身就返回DataFrame,原代码里的pd.DataFrame.from_dict()属于冗余操作,可以直接简化。- 如果确认目录里应该全是有效JSON文件,但仍报错,异常捕获会帮你快速定位到内容损坏或为空的问题文件。
内容的提问来源于stack exchange,提问作者M. Wood
相关产品推荐
相关产品推荐

