You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历多子目录提取指定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)

问题分析

原代码存在两个核心问题:

  1. 打开文件时仅使用文件名file,未结合当前子目录路径root,会导致程序在当前工作目录而非目标子目录中查找文件,最终触发找不到文件的错误
  2. 未将读取到的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:42:56