如何使用Python或jq将统一字段的多个JSON文件合并为单个CSV文件
解决方案
报错原因修复
你遇到的语法错误是系统将Python脚本识别为Shell脚本执行导致,两种修复方式:
- 执行命令改为
python3 json.merge.python.1.py调用Python解释器运行 - 在脚本第一行添加
#!/usr/bin/env python3声明,再赋予执行权限后运行
批量JSON转CSV低内存方案
该方案逐文件处理,无需一次性加载所有JSON数据到内存,支持处理opinions_cited数组类型字段,单JSON对应CSV单行,新增自增计数id替换原有源id字段,适配你给出的所有字段需求。
完整代码
#!/usr/bin/env python3 import glob import csv import json # 定义CSV列名,新增count_id作为首列,替换原有id CSV_COLUMNS = [ "count_id", "resource_url", "absolute_url", "cluster", "author", "joined_by", "author_str", "per_curiam", "date_created", "date_modified", "type", "sha1", "page_count", "download_url", "local_path", "plain_text", "html", "html_lawbox", "html_columbia", "html_with_citations", "extracted_by_ocr", "opinions_cited" ] if __name__ == "__main__": # 获取所有json文件路径 json_files = glob.glob("*.json") count_id = 1 with open("wash_opinions.csv", "w", newline="", encoding="utf-8") as csv_f: writer = csv.DictWriter(csv_f, fieldnames=CSV_COLUMNS, quoting=csv.QUOTE_ALL) writer.writeheader() for json_path in json_files: # 逐文件读取解析 with open(json_path, "r", encoding="utf-8") as jf: try: data = json.load(jf) except json.JSONDecodeError: # 跳过损坏的JSON文件 print(f"跳过损坏文件:{json_path}") continue row = {"count_id": count_id} # 填充普通字段 for col in CSV_COLUMNS[1:-1]: row[col] = data.get(col, "") # 处理opinions_cited数组,用分号拼接成字符串 opinions_cited = data.get("opinions_cited", []) row["opinions_cited"] = ";".join([str(item) for item in opinions_cited]) if opinions_cited else "" writer.writerow(row) count_id += 1 print(f"处理完成,共导出{count_id-1}条记录到wash_opinions.csv")
使用说明
- 将上述代码保存为
json_to_csv.py,和所有JSON文件放在同一目录下 - 执行命令
python3 json_to_csv.py运行即可 - 若需要修改opinions_cited的分隔符,替换代码中
";".join的分号为其他符号即可 - 脚本会自动跳过损坏的JSON文件,运行过程中会打印损坏文件路径
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

