You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取目录中所有JSON文件时出现FileNotFoundError的问题排查

问题根源与解决方案

你的问题其实是个很常见的路径误区——os.listdir()返回的仅仅是目标目录里的文件名,不是完整的文件路径!

当你在循环里直接用open(file, 'r')时,Python会默认在当前脚本运行的工作目录下去找这个文件,而不是你指定的TripAdvisorHotels目录里,这就导致了FileNotFoundError。

而你单独打开文件能成功、遍历打印文件名也正常的原因是:

  • 单独测试时,你要么是在TripAdvisorHotels目录下运行的代码,要么是确保了该文件在当前工作目录中;
  • os.listdir()只是读取目录里的文件名列表,不需要完整路径就能正常返回。

修复方案1:用os.path.join()拼接完整路径

这是最经典的处理方式,通过os.path.join()把目录路径和文件名拼接成完整路径,让open()能准确找到文件:

import os
import json

path_to_jsonfiles = 'TripAdvisorHotels'
alldicts = []

for file in os.listdir(path_to_jsonfiles):
    # 拼接目录与文件名,生成完整路径
    full_path = os.path.join(path_to_jsonfiles, file)
    with open(full_path, 'r') as fi:
        # 注意:别用dict当变量名,它是Python内置类型,会覆盖内置函数
        hotel_dict = json.load(fi)
        alldicts.append(hotel_dict)

修复方案2:用pathlib(Python3.4+推荐)

pathlib是Python3.4引入的面向对象的路径处理模块,写法更简洁直观,还能自动处理跨平台路径问题:

from pathlib import Path
import json

path_to_jsonfiles = Path('TripAdvisorHotels')
alldicts = []

# 遍历目录下的所有路径对象
for file_path in path_to_jsonfiles.iterdir():
    # 先判断是不是文件,避免误处理子目录
    if file_path.is_file():
        with open(file_path, 'r') as fi:
            hotel_dict = json.load(fi)
            alldicts.append(hotel_dict)

这样修改后,循环就能正确读取所有JSON文件并追加到列表里了。

内容的提问来源于stack exchange,提问作者Lisadk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:08:52