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

如何用Python循环批量合并目录JSON为CSV并解决Trailing data报错

批量JSON转CSV合并方案

原代码问题排查

你的代码存在3个核心问题,是导致报错和无法正常合并的原因:

  • 路径拼接错误:os.listdir(dir1) 仅返回目标目录下的文件名,不包含父目录路径,直接执行open(ffile)会在当前脚本运行的工作目录下找文件,根本读不到jsfiles文件夹内的JSON文件,极易触发文件读取错误。
  • 合并逻辑缺失:循环内每次都直接给df变量重新赋值,之前读取的文件内容会被完全覆盖,最终只会保留最后一个读取的文件内容,完全没实现多文件合并的需求。
  • JSON格式适配错误:抛出ValueError: Trailing data是因为你存储的JSON文件大概率是JSON Lines格式(即每行独立存储一个JSON对象,是批量数据导出、日志存储的常用格式),pandas.read_json()默认读取整文件为单个标准JSON结构,无法识别逐行存储的格式,需要加参数适配。

可直接运行的修正代码

import pandas as pd
import os

# 配置参数
json_file_dir = 'jsfiles'
output_csv_path = 'merged.csv'

# 初始化列表暂存所有文件读取结果
all_df = []

for filename in os.listdir(json_file_dir):
    # 跳过非json后缀的文件,避免误读目录内其他文件
    if not filename.endswith('.json'):
        continue
    # 拼接文件完整路径,兼容Windows/macOS/Linux系统
    full_path = os.path.join(json_file_dir, filename)
    # 读取JSON,lines=True适配JSON Lines格式,解决Trailing data报错
    single_df = pd.read_json(full_path, encoding='utf-8', lines=True)
    all_df.append(single_df)

# 合并所有数据并导出
final_df = pd.concat(all_df, ignore_index=True)
final_df.to_csv(output_csv_path, encoding='utf-8', index=False)
print(f"处理完成:共合并{len(all_df)}个JSON文件,结果已导出至{output_csv_path}")

补充说明

  • 如果目录内同时存在标准整文件JSON、JSON Lines两种格式,可以把读取文件的代码加异常捕获,两种格式自动兼容:
    try:
        single_df = pd.read_json(full_path, encoding='utf-8')
    except ValueError:
        single_df = pd.read_json(full_path, encoding='utf-8', lines=True)
    
  • 如果JSON数据存在多层嵌套结构,需要先做扁平化处理再导出,否则嵌套字段会被直接转成字符串存入CSV,不利于后续分析。
  • 如果文件总数据量过大超过内存,可以改用逐行读取、逐行写入CSV的方式,避免内存溢出。

内容的提问来源于stack exchange,提问作者Kasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:21:23