解析多个JSON文件时始终返回空列表[]的技术求助
排查Python遍历JSON文件返回空列表的问题
你的代码执行后返回空列表,核心问题出在路径匹配错误,以下是具体原因和修复方案:
问题原因
当前工作目录与传入路径冲突
你已经通过os.chdir('C:/Users/Hasnain/Downloads/assignment (1)/assignment/Json_dump')切换到了目标JSON目录,之后调用get_file("Json_dump")时,程序会在当前目录(也就是已经进入的Json_dump文件夹)下寻找名为Json_dump的子文件夹,而这个子文件夹不存在,所以遍历不到任何文件。冗余的文件列表覆盖(非核心但可优化)
os.walk已经返回了当前目录下的files列表,你又用glob.glob重新赋值覆盖了这个变量,虽然逻辑上能找到文件,但属于冗余操作,没必要重复处理。
修复方案
方案一:修正传入的路径
既然已经切换到目标目录,直接传入当前目录.即可:
import json import sys import os import glob os.chdir('C:/Users/Hasnain/Downloads/assignment (1)/assignment/Json_dump') def get_file(filepath): all_files = [] for root,dirs,files in os.walk(filepath): # 用os.walk返回的files筛选json文件,替代glob for f in files: if f.endswith('.json'): all_files.append(os.path.abspath(os.path.join(root, f))) return all_files json_data = get_file(".") print(json_data)
方案二:不切换目录,直接传入完整路径
如果不需要切换工作目录,直接用完整路径调用函数更清晰:
import json import sys import os import glob def get_file(filepath): all_files = [] for root,dirs,files in os.walk(filepath): for f in files: if f.endswith('.json'): all_files.append(os.path.abspath(os.path.join(root, f))) return all_files # 直接传入完整目标路径 json_data = get_file("C:/Users/Hasnain/Downloads/assignment (1)/assignment/Json_dump") print(json_data)
额外优化:用glob递归遍历简化代码
如果不需要os.walk的其他功能,用glob.glob的递归模式可以更简洁:
import glob import os def get_file(filepath): return [os.path.abspath(f) for f in glob.glob(os.path.join(filepath, '**/*.json'), recursive=True)] json_data = get_file("C:/Users/Hasnain/Downloads/assignment (1)/assignment/Json_dump") print(json_data)
内容的提问来源于stack exchange,提问作者Hasnain Khan
相关产品推荐
相关产品推荐

