使用os.mkdir创建子文件夹时遭遇FileNotFoundError问题求助
问题分析
报错FileNotFoundError的核心原因有两点:
- 路径格式错误:Windows系统下的路径缺少盘符前缀(如
C:/),当前路径被识别为相对路径,导致系统无法定位到目标目录。 - 单级目录创建限制:
os.mkdir()仅能创建单级目录,若上级目录(比如output)本身不存在,直接创建其子目录会触发找不到路径的错误。
解决方案
1. 修正路径格式
将路径改为Windows系统的绝对路径格式,补充盘符前缀;也可通过os.path模块的方法动态生成路径,避免硬编码带来的兼容性问题。
2. 递归创建目录
用os.makedirs()替换os.mkdir(),并添加exist_ok=True参数——该参数允许目录已存在时不抛出错误,同时会自动创建所有不存在的上级目录。
修改后的代码
import sys import pickle import os import glob import time from GenerateEmbeddings import generate_embeddings_narrow, generate_embeddings_wide # 用os.path.join拼接路径,同时修正盘符问题 base_dir = "C:/Users/mohdm/Desktop/Project" output_dir = os.path.join(base_dir, "output") output_path_narrow = os.path.join(output_dir, "dataset-narrow") output_path_wide = os.path.join(output_dir, "dataset-wide") # 递归创建目录,避免上级目录不存在或目录已存在的报错 os.makedirs(output_path_narrow, exist_ok=True) os.makedirs(output_path_wide, exist_ok=True) input_path_narrow = os.path.join(base_dir, "input", "dataset-narrow") input_path_wide = os.path.join(base_dir, "input", "dataset-wide") # 用os.path.join拼接匹配路径,提升跨平台兼容性 dataset_narrow = glob.glob(os.path.join(input_path_narrow, '*.txt')) dataset_wide = glob.glob(os.path.join(input_path_wide, '*.txt')) try: generate_embeddings_narrow(dataset_narrow, input_path_narrow, output_path_narrow) del dataset_narrow generate_embeddings_wide(dataset_wide, input_path_wide, output_path_wide) del dataset_wide except Exception as e: # 捕获并打印异常,便于排查问题 print(f"执行出错: {str(e)}")
额外优化建议
- 始终用
os.path.join()拼接路径,避免手动拼接时出现路径分隔符(/或\)的适配问题,让代码支持跨平台运行。 - 避免使用空
except:捕获所有异常,应指定具体异常类型或至少打印错误信息,方便后续定位问题。
内容的提问来源于stack exchange,提问作者CatchTwentyTwo
相关产品推荐
相关产品推荐

