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

如何在Python中临时切换目录执行代码且不影响全局工作目录?

如何在Python中临时切换工作目录且不影响全局状态?

问题场景

需要在多个不同文件夹内执行文件计算操作,但不想改变全局工作目录。尝试用with os.chdir('/directory')时触发AttributeError: __enter__错误;手动保存、切换、恢复目录的方式调试繁琐,属于不良实践。

优雅解决方案

方案1:自定义上下文管理器(兼容所有Python版本)

用contextlib.contextmanager实现一个临时切换目录的上下文管理器,自动处理目录的切换与恢复,即使代码块抛出异常也能保证回到原目录:

import os
from contextlib import contextmanager

@contextmanager
def temp_cd(target_dir):
    # 保存当前工作目录
    original_dir = os.getcwd()
    try:
        # 切换到目标目录
        os.chdir(target_dir)
        yield  # 执行with代码块内的操作
    finally:
        # 无论是否出错,都恢复原目录
        os.chdir(original_dir)

使用方式:

with temp_cd("/path/to/target/dir"):
    # 在这里执行需要在目标目录下的操作
    print(os.getcwd())  # 输出目标目录路径
# 退出with块后,自动回到原工作目录
print(os.getcwd())  # 输出初始工作目录路径

方案2:直接使用Python 3.11+的os.chdir上下文支持

Python 3.11及以上版本中,os.chdir已原生支持上下文管理器,无需自定义,直接用你最初尝试的写法即可:

import os

with os.chdir("/directory"):
    # 执行目标目录下的操作
    pass

这种方式最简洁,完全符合你最初的预期写法,不会再触发AttributeError。

方案优势

  • 无需手动管理目录的保存与恢复,避免遗漏或出错
  • 符合Python的上下文管理规范,代码更易读、更可靠
  • 异常安全:即使代码块内抛出异常,也能确保工作目录恢复到初始状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:15:39