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

Python使用open()保存文件失败:提示目录不存在但目录实际存在

问题:无法保存指定文件名,报错目录不存在但实际存在

问题现象与排查结果:

  • 程序报错提示目录不存在,但该目录实际已存在
  • 可在资源管理器手动创建该文件→文件名合法
  • 可在资源管理器手动创建该目录→目录名合法
  • 将其他文件名(如aaa.png)保存到该目录成功→路径合法、无权限问题、写入方式正常
  • 该文件可写入上级目录download_pictures→并非文件名本身问题

代码示例:

import os

# 目标路径
path = 'download_pictures\\landscape[or]no people[or]nature[OrderBydata]\\'
# 待保存的文件名
download_name = '[6]772803-2500x1459-genshin+impact-lumine+(genshin+impact)-arama+(genshin+impact)-aranara+(genshin+impact)-arabalika+(genshin+impact)-arakavi+(genshin+impact).png'
filename = path + download_name
print('文件名 = ', filename)

# 确保目录存在
if not os.path.exists(path):
    os.makedirs(path)

try:
    with open(filename, 'w') as f:
        f.write('test')
except Exception as e:
    print('\n【错误!】第一次保存文件失败,捕获异常:', e)
    print(filename)

# 测试修改文件名保存
filename = path + 'aaa.png'
with open(filename, 'w') as f:
    print('\n第二次保存文件,修改文件名为aaa.png,路径不变')
    f.write('test')
    print(filename)

# 测试修改目录保存原文件名
path = 'download_pictures\\'
filename = path + download_name
with open(filename, 'w') as f:
    print('\n第三次保存文件,文件名不变,修改目录为上级目录')
    f.write('test')

控制台输出(已翻译):

文件名 =  download_pictures\landscape[or]no people[or]nature[OrderBydata]\[6]772803-2500x1459-genshin+impact-lumine+(genshin+impact)-arama+(genshin+impact)-aranara+(genshin+impact)-arabalika+(genshin+impact)-arakavi+(genshin+impact).png

【错误!】第一次保存文件失败,捕获异常: [Errno 2] 没有那个文件或目录: 'download_pictures\\landscape[or]no people[or]nature[OrderBydata]\\[6]772803-2500x1459-genshin+impact-lumine+(genshin+impact)-arama+(genshin+impact)-aranara+(genshin+impact)-arabalika+(genshin+impact)-arakavi+(genshin+impact).png'
download_pictures\landscape[or]no people[or]nature[OrderBydata]\[6]772803-2500x1459-genshin+impact-lumine+(genshin+impact)-arama+(genshin+impact)-aranara+(genshin+impact)-arabalika+(genshin+impact)-arakavi+(genshin+impact).png

第二次保存文件,修改文件名为aaa.png,路径不变
download_pictures\landscape[or]no people[or]nature[OrderBydata]\aaa.png

第三次保存文件,文件名不变,修改目录为上级目录

进程结束,退出代码 0

解决方案:

问题根源是文件名中的特殊字符被Windows系统误解——方括号[]会被部分系统API解析为通配符(类似正则匹配规则),结合目录名里的[or]结构,导致系统无法正确识别实际文件路径。

可通过以下方式解决:

  1. 替换特殊字符:将文件名里的方括号[]、加号+等易引发歧义的字符替换为下划线_:
    download_name = download_name.replace('[', '_').replace(']', '_').replace('+', '_')
    
  2. 使用原始字符串定义路径:在路径字符串前加r,避免转义字符干扰:
    path = r'download_pictures\landscape[or]no people[or]nature[OrderBydata]\'
    
  3. 用os.path.join拼接路径:避免手动拼接路径的格式问题,提升跨系统兼容性:
    filename = os.path.join(path, download_name)
    

组合修改后的代码示例:

import os

# 使用原始字符串定义路径
path = r'download_pictures\landscape[or]no people[or]nature[OrderBydata]\'
download_name = '[6]772803-2500x1459-genshin+impact-lumine+(genshin+impact)-arama+(genshin+impact)-aranara+(genshin+impact)-arabalika+(genshin+impact)-arakavi+(genshin+impact).png'

# 替换特殊字符
download_name = download_name.replace('[', '_').replace(']', '_').replace('+', '_')

# 使用os.path.join拼接路径
filename = os.path.join(path, download_name)
print('处理后的文件名 = ', filename)

# 确保目录存在
if not os.path.exists(path):
    os.makedirs(path)

try:
    with open(filename, 'w') as f:
        f.write('test')
    print('保存成功')
except Exception as e:
    print('\n【错误!】保存失败,捕获异常:', e)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:50:27