按序使用列表元素:多CSV转JSON仅处理首个文件问题排查
解决多CSV文件转JSON的遍历问题
问题根源
你的代码存在两个核心问题:
- 没有将所有CSV文件路径存入列表,而是每次循环都覆盖
csvlist变量,最终仅保留单个文件路径 main函数内的循环逻辑错误,误将单个文件路径的字符串长度当作文件数量来循环,实际根本没遍历所有文件
修正后的代码
import json import csv import os # 收集所有CSV文件路径到列表 csv_files = [] folder_path = "C:/Users/folder_to_csv" for file in os.listdir(folder_path): filename = os.fsdecode(file) if filename.endswith(".csv"): csv_files.append(os.path.join(folder_path, filename)) def convert_csv_to_json(csv_path): # 读取CSV文件并转为字典列表 with open(csv_path, mode='r', encoding='utf-8') as f: reader = csv.DictReader(f) process_data = [row for row in reader] # 生成JSON字符串并写入对应文件 json_obj = json.dumps(process_data, indent=4) json_filename = os.path.splitext(csv_path)[0] + ".json" with open(json_filename, mode='w', encoding='utf-8') as f: f.write(json_obj) print(f"已完成转换:{csv_path} -> {json_filename}") def main(): # 遍历所有CSV文件逐个转换 for csv_path in csv_files: convert_csv_to_json(csv_path) if __name__ == "__main__": main()
关键改进点
- 用
csv_files列表存储所有CSV文件路径,避免变量被覆盖 - 将转换逻辑封装为独立函数,代码结构更清晰
- 自动生成对应文件名的JSON文件(如
test.csv转为test.json),而非仅打印JSON字符串 - 指定编码为
utf-8,避免中文乱码问题
内容的提问来源于stack exchange,提问作者Cathy
相关产品推荐
相关产品推荐

