遍历多子目录提取指定JSON文件并合并至Pandas DataFrame
合并多子目录下指定JSON文件为Pandas DataFrame
问题描述
我有一个包含多个子目录的文件夹,子目录中存有若干.json文件。我仅需提取每个子目录中名为"all_content.json"的文件内容(该文件名在各目录中统一),并将这些内容合并到一个Pandas DataFrame中,以JSON的键作为列名(示例:列1为content、列2为date,JSON示例:{"content": "The flowers are so pretty here", "date": "1999-10-22"})。
以下是我目前尝试的代码,但不确定如何正确筛选目标文件、打开文件并保存内容:
path = './folders' for root, dirs, files in os.walk(path): print(files) # returns list of all files in the folder for file in files: if file.endswith("all_content.json"): print(file) with open(file) as fp: data = json.load(fp)
问题分析
原代码存在两个核心问题:
- 打开文件时仅使用文件名
file,未结合当前子目录路径root,会导致程序在当前工作目录而非目标子目录中查找文件,最终触发找不到文件的错误 - 未将读取到的JSON数据统一收集,无法完成后续的DataFrame转换
修正后的完整代码
import os import json import pandas as pd # 目标文件夹路径 path = './folders' # 用于存储所有JSON数据的列表 data_list = [] # 遍历所有子目录及文件 for root, dirs, files in os.walk(path): for file in files: # 精准匹配目标文件名 if file == "all_content.json": # 拼接完整文件路径 full_file_path = os.path.join(root, file) # 读取JSON文件内容 with open(full_file_path, 'r', encoding='utf-8') as fp: json_content = json.load(fp) # 将当前JSON数据添加到列表中 data_list.append(json_content) # 将收集到的所有JSON数据转换为Pandas DataFrame merged_df = pd.DataFrame(data_list) # 可选:查看合并后的前5行数据 print(merged_df.head()) # 可选:将结果保存为CSV或JSON文件 merged_df.to_csv('merged_all_content.csv', index=False, encoding='utf-8') merged_df.to_json('merged_all_content.json', orient='records', force_ascii=False)
关键说明
- 完整路径拼接:使用
os.path.join(root, file)生成文件的完整路径,确保程序能准确定位到子目录中的目标文件 - 精准文件名匹配:直接判断
file == "all_content.json",避免endswith可能带来的误匹配(比如xxx_all_content.json这类文件) - 高效数据收集:用列表统一存储每个JSON字典,最后一次性转换为DataFrame,比逐行添加数据到DataFrame的效率更高
- 编码处理:打开文件时指定
encoding='utf-8',避免中文等非ASCII字符出现乱码问题
内容的提问来源于stack exchange,提问作者msa
相关产品推荐
相关产品推荐

