我的知识记录

Python批量读取多个JSON汇总教程

用Python遍历文件夹批量读取多个JSON文件,合并成一个大列表或汇总成统计表,支持嵌套字段提取和错误跳过,附完整代码。

场景痛点

爬虫按页存了几百个JSON、日志系统按天输出JSON、导出的用户分群数据一个文件一个ID。手动打开每个文件复制粘贴不现实,想把它们合并成一张表做统计,或者汇总成一个总数。用Python遍历文件夹一把搞定。

用到的库

# 纯标准库即可,需要pandas汇总时才装
pip install pandas

完整代码

# 批量读取多个JSON文件并汇总
import os
import glob
import json
import pandas as pd

def load_all_json_from_folder(folder_path):
"""
遍历文件夹下所有.json文件,合并成一个大列表。
每个JSON根是list[dict],或者根是单个dict。
"""
files = sorted(glob.glob(os.path.join(folder_path, "*.json")))
print(f"找到 {len(files)} 个JSON文件")

all_records = []
for fp in files:
try:
with open(fp, "r", encoding="utf-8") as f:
data = json.load(f)
# 记录来源文件,方便回溯
source = os.path.basename(fp)
if isinstance(data, list):
for item in data:
item["_source"] = source
all_records.append(item)
elif isinstance(data, dict):
data["_source"] = source
all_records.append(data)
except Exception as e:
print(f"  跳过 {os.path.basename(fp)}:{e}")
print(f"共加载 {len(all_records)} 条记录")
return all_records

def summarize_records(records):
"""
用pandas做简单汇总:总数、按某个字段分组计数、按数值字段求和。
"""
if not records:
print("没有数据")
return

df = pd.DataFrame(records)
print("\n=== 汇总信息 ===")
print(f"总记录数:{len(df)}")
print(f"字段列表:{list(df.columns)}")

# 示例:如果有"城市"字段,按城市统计数量
if "city" in df.columns:
print("\n按城市分布:")
print(df["city"].value_counts())

# 示例:如果有"金额"字段,求和
for col in ["amount", "price", "金额"]:
if col in df.columns:
print(f"\n{col} 总和:{df[col].sum()}, 均值:{df[col].mean():.2f}")

return df

def main():
folder = "./json_logs"
records = load_all_json_from_folder(folder)
df = summarize_records(records)

# 合并结果存成CSV方便后续分析
if df is not None and len(df) > 0:
df.to_csv("json_summary.csv", index=False, encoding="utf-8-sig")
print("\n已导出汇总CSV:json_summary.csv")

if __name__ == "__main__":
main()

代码讲解

  • glob.glob 批量找 .json 文件,sorted 保证处理顺序稳定。
  • 每个文件读出来判断根类型:是list就逐条加来源后追加,是dict就包一层追加。
  • 每个记录加 _source 字段,后面发现数据异常能定位到原始文件。
  • try/except 包住单个文件,一个坏文件不影响其他文件处理。
  • 汇总阶段用pandas,value_counts 分组计数、sum/mean 数值聚合,几行出统计结果。

运行结果

控制台打印找到多少个JSON、成功加载多少条、跳过几个坏文件、各字段统计。当前目录生成 json_summary.csv,包含所有JSON合并后的扁平数据,多了一列 _source 标记来源。

注意事项

  • JSON文件命名带时间戳时,sorted() 自然按时间排序,方便按时间序列分析。
  • 各文件字段不一致时,pandas会自动对齐,缺的列填NaN。
  • 文件总量很大时,不要一次性把所有dict放内存,边读边写CSV或用chunksize思路。
  • 解析报错先单独打开那个文件检查是不是被截断了,json.tool 可以校验。

Python批量读取多个JSON汇总教程

标签:

更新时间:2026-09-14 21:05:06

上一篇:Python CSV大数据分块读取教程:chunksize不爆内存

下一篇:Python自动发送邮件 smtplib基础教程