You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python新手遇文件写入Errno 2错误,寻求解决方法

问题原因与解决办法

首先看你遇到的IOError: [Errno 2] No such file or directory错误,核心原因有两个,咱们逐一拆解:

1. 目标目录不存在,导致无法写入文件

你的代码直接尝试向%s/design_Rat%s_Run_%s.fsf路径写入文件,但如果fsfdir对应的目录(也就是D:/1_NEW_ANALYSIS/Scripts/Melodic_fsfs)还没有创建,Python就会抛出这个错误——它不会自动帮你生成不存在的目录。

2. 路径拆分时的索引错误(可能引发后续异常)

看这段代码:

splitdir = dir.split('\\')
splitdir_sub = splitdir[1]
subnum=splitdir_sub[-2:]

在Windows系统中,glob.glob返回的路径是类似D:\1_NEW_ANALYSIS\Subjects\Rat_01\Run_1这样的格式,用split('\\')拆分后,得到的列表应该是['D:', '1_NEW_ANALYSIS', 'Subjects', 'Rat_01', 'Run_1']。你现在取splitdir[1]拿到的是1_NEW_ANALYSIS,然后subnum=splitdir_sub[-2:]会得到YS,这显然不是你想要的01!这会导致后续生成的文件名错误,甚至可能在其他环节引发路径问题。


解决步骤

第一步:确保目标目录存在

在写入文件前,先检查并创建fsfdir目录,可以用os.makedirs函数(加上exist_ok=True避免目录已存在时报错):

import os
import glob

studydir = 'D:/1_NEW_ANALYSIS'
fsfdir="%s/Scripts/Melodic_fsfs"%(studydir)
templatedir="%s/Scripts/Templates"%(studydir)

# 新增:创建目标目录,不存在则创建,已存在则跳过
os.makedirs(fsfdir, exist_ok=True)

subdirs=glob.glob("%s/Subjects/Rat_[0-9][0-9]/Run_[0-2]"%(studydir))

第二步:修正路径拆分的索引错误

splitdir_sub的索引改成正确的位置,拿到Rat_XX部分:

for dir in list(subdirs):
    splitdir = dir.split('\\')
    # 修正索引:取Rat_XX所在的位置,也就是splitdir[3]
    splitdir_sub = splitdir[3]
    subnum=splitdir_sub[-2:]
    splitdir_run = splitdir[4]
    runnum=splitdir_run[-1:]
    print(subnum)
    # 后续代码不变...

或者更稳妥的方式,用os.path.basename直接获取最后一级目录,避免依赖固定索引:

for dir in list(subdirs):
    # 获取Run_X的上级目录(Rat_XX)
    sub_dir = os.path.dirname(dir)
    splitdir_sub = os.path.basename(sub_dir)
    subnum = splitdir_sub[-2:]
    # 获取Run_X目录名
    splitdir_run = os.path.basename(dir)
    runnum = splitdir_run[-1:]
    print(subnum)

这种方式不管路径深度怎么变,都能正确拿到Rat_XXRun_X的信息,鲁棒性更强。


按照上面的步骤修改后,你的脚本应该就能正常写入文件了。

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

火山引擎 最新活动