Python批量转换文件夹多JSON文件为CSV的代码修改咨询
批量JSON转CSV方案解答
是否需要导入glob库
是需要的。glob是Python内置标准库,不需要额外安装,专门用于匹配指定路径下符合规则的文件,刚好可以快速获取目标文件夹下所有.json后缀的文件,不用手写复杂的文件遍历逻辑,非常适合新手使用。
原代码核心问题
- 错误将
*.json作为文件名传入codecs.open,该函数只能打开单个文件,不支持通配符匹配多文件 sys.argv[0]取到的是当前运行的Python脚本自身的路径,不是你要传入的JSON存放目录参数- 路径硬编码,没有多文件遍历逻辑,只能处理单个固定文件
修改后的可运行代码
# -*-coding:utf-8 -*- import csv import json import sys import glob import os def trans(json_dir, output_csv_path): # 打开CSV文件准备写入 csvfile = open(output_csv_path, 'w', encoding='utf-8', newline='') writer = csv.writer(csvfile, delimiter=',') flag = True # 用glob匹配目录下所有json后缀文件 all_json_files = glob.glob(os.path.join(json_dir, "*.json")) for json_file in all_json_files: # 逐个打开JSON文件 with open(json_file, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue dic = json.loads(line) # 第一次写入先写表头 if flag: keys = list(dic.keys()) writer.writerow(keys) flag = False writer.writerow(list(dic.values())) csvfile.close() if __name__ == '__main__': # 第一个参数是脚本名,第二个参数是你存放JSON的文件夹路径,第三个是输出CSV路径 if len(sys.argv) != 3: print("使用方法:python 脚本文件名.py JSON文件夹路径 输出CSV完整路径") print("示例:python json2csv.py C:/Users/jeri/Desktop/json_folder C:/Users/jeri/Desktop/output.csv") sys.exit(1) json_dir = sys.argv[1] output_csv = sys.argv[2] trans(json_dir, output_csv)
注意事项
- 请保证所有待转换的JSON文件结构完全一致,否则CSV的列会出现错位
- 代码默认处理的是行存储格式的JSON(也就是每行是一个独立的JSON对象,和你原有代码逻辑一致),如果你的JSON文件是整个文件为单个JSON数组/对象,需要调整读取逻辑
- 运行时直接在命令行按照说明传入对应路径即可运行
内容的提问来源于stack exchange,提问作者jeri teri
相关产品推荐
相关产品推荐

