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

Python使用w+模式写入文件报FileNotFoundError错误如何解决

问题成因

w+ 模式仅会自动创建不存在的目标文件,不会自动创建文件路径中不存在的上级目录。你代码里拼接得到的路径中C:\\Users\\Habib\\Documents\\Upwork_Projects\\Stephanie-web-scraping\\ufccrawler\\fighter这个fighter目录实际不存在,open()函数本身没有创建父目录的能力,因此无论切换a+/r+等任何模式都会触发该报错。

此外你原本手动用\\分割、拼接路径的写法仅适配Windows系统,在Linux/Mac环境下会因为路径分隔符不匹配出现逻辑错误。同时with上下文管理器会自动关闭文件,你写的f.close()属于冗余代码。

解决方法

在执行文件写入操作前,先判断目标文件的上级目录是否存在,不存在则手动创建即可,同时优化路径拼接逻辑避免跨平台兼容性问题:

方案1:基于os模块修改(兼容所有Python版本)

修改后代码如下:

page = response.url.split("&")[0][-1]
# 页面URL结构示例:http://ufcstats.com/statistics/fighters?char=a&page=all
filename = f'fighters-{page}.json'

path = os.getcwd()
# 向上跳两级目录替代手动分割路径
new_path = os.path.dirname(os.path.dirname(path))
# 用os.path.join拼接目录,自动适配系统路径分隔符
fighter_dir = os.path.join(new_path, "fighter")
# 目录不存在则递归创建,exist_ok=True表示目录已存在时不抛出错误
os.makedirs(fighter_dir, exist_ok=True)

completeName = os.path.join(fighter_dir, filename)

with open(completeName, 'w+') as f:
    f.write(json.dumps(results, indent=2))
self.log(f'Saved file {completeName}')

方案2:基于pathlib修改(Python3.4+ 推荐,写法更简洁)

from pathlib import Path

page = response.url.split("&")[0][-1]
filename = f'fighters-{page}.json'

# 链式获取目标目录,写法更直观
fighter_dir = Path.cwd().parent.parent / "fighter"
# 递归创建目录
fighter_dir.mkdir(parents=True, exist_ok=True)

completeName = fighter_dir / filename

with open(completeName, 'w+') as f:
    f.write(json.dumps(results, indent=2))
self.log(f'Saved file {completeName}')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:05