使用os.chdir创建文件夹后,文件读取路径异常的问题求助
解决os.chdir切换目录导致文件读取失败的问题
问题原因
os.chdir()会全局修改程序的当前工作目录,你调用它切换到saved_data后,后续所有相对路径都会基于这个新目录解析。你的read_txt_file函数用'text/' + str(destination) + '.txt'这种相对路径,程序会去saved_data/text下找文件,但实际text文件夹在项目根目录,所以触发找不到文件的错误。
推荐方案:不使用os.chdir,直接创建目标文件夹
直接拼接目标文件夹的路径,不需要切换工作目录,这样不会影响其他功能的路径解析:
import os def create_world(): # 拼接saved_data/world2的完整路径 target_folder = os.path.join('saved_data', 'world2') # exist_ok=True避免文件夹已存在时抛出异常 os.makedirs(target_folder, exist_ok=True)
备选方案:临时切换目录后恢复原目录
如果一定要用os.chdir,记得先保存原工作目录,操作完成后切回去,保证后续函数的工作目录不受影响:
def create_world(): # 保存当前工作目录 original_dir = os.getcwd() try: os.chdir('saved_data') os.makedirs('world2', exist_ok=True) finally: # 无论操作成功或失败,都切回原目录 os.chdir(original_dir)
额外优化:让文件读取函数更稳定
可以让read_txt_file基于项目根目录生成绝对路径,彻底避免相对路径的依赖问题:
def read_txt_file(destination, line1): # 获取当前脚本所在的项目根目录绝对路径 root_path = os.path.dirname(os.path.abspath(__file__)) # 拼接text文件夹和目标文件的完整路径 file_path = os.path.join(root_path, 'text', f'{destination}.txt') # 用with语句自动管理文件资源,避免忘记关闭文件 with open(file_path, 'r') as file: lines = [line.strip() for line in file] return lines[line1 - 1]
内容的提问来源于stack exchange,提问作者5Gamerz
相关产品推荐
相关产品推荐

