Python遍历嵌套目录读取JSON报FileNotFoundError问题求助
报错原因
- 变量赋值顺序错误:原代码在遍历
fileList的循环外就提前调用os.path.join(dirName, file)生成绝对路径,此时file变量还未定义,或是之前循环的残留值,并没有指向你需要的activities.json文件,生成的路径自然无效。 - 路径拼接逻辑错误:即便是后续找到了目标JSON文件,你也没有重新给
abs_path赋值,读取时用的还是错误路径,Python默认会从脚本所在的工作目录查找文件名,自然找不到对应文件。
修复后的代码
import os import json from pprint import pprint import win32com.client as win32 # pip install pywin32 import pandas as pd # 后续导出Excel需要用到,无依赖可执行 pip install pandas openpyxl rootDir = 'C:/Users/Adam/Desktop/Linkedin/linkedin_hb_ma' target_member_id = "1eb95ebb-d87d-4aac-XX-XX182" target_json_name = "activities.json" # 存储所有读取到的json数据,后续方便导出Excel all_data = [] for dirName, subdirList, fileList in os.walk(rootDir, topdown=False): # 判断当前目录是不是目标会员ID目录 if dirName.endswith(target_member_id): print(f'找到目标会员目录: {dirName}') for file in fileList: if file.endswith(target_json_name): # 找到目标文件后再拼接绝对路径,保证路径正确性 abs_path = os.path.join(dirName, file) print(f'读取目标文件: {abs_path}') # 指定encoding避免中文乱码,用with语法避免资源泄漏 with open(abs_path, 'r', encoding='utf-8') as f: json_data = json.load(f) pprint(json_data) all_data.append(json_data) # 导出Excel补充逻辑,可根据你的JSON结构调整字段 if all_data: df = pd.json_normalize(all_data) df.to_excel('linkedin_activities.xlsx', index=False) print("Excel文件已导出成功")
改动说明
- 调整了路径拼接的位置:只有在遍历到目标
activities.json文件后才拼接绝对路径,从根源上避免路径错误 - 改用
with open语法读取文件,避免文件资源泄漏,同时指定编码适配中文内容 - 补充了JSON转Excel的实现逻辑,基于pandas自动扁平化JSON结构导出,可根据实际业务字段需求调整导出规则
内容的提问来源于stack exchange,提问作者aymane
相关产品推荐
相关产品推荐

