Python 你能为abspath设置cwd吗?

Python 你能为abspath设置cwd吗?,python,path,python-3.4,Python,Path,Python 3.4,我试图将相对路径扩展为绝对路径。相对路径有时会包含一个,需要从当前工作目录中展开。我想知道Python中是否有任何标准函数接受cwdkwarg,就像subprocess.popen那样 最佳解决方案 abs_path = os.path.abspath(rel_path, cwd=special_cwd) # Capture current working directory previous_cwd = os.getcwd() # Change to the new working dir

我试图将相对路径扩展为绝对路径。相对路径有时会包含一个
,需要从当前工作目录中展开。我想知道Python中是否有任何标准函数接受
cwd
kwarg,就像
subprocess.popen
那样

最佳解决方案

abs_path = os.path.abspath(rel_path, cwd=special_cwd)
# Capture current working directory
previous_cwd = os.getcwd()

# Change to the new working directory
os.chdir(new_cwd)

# Convert relative path to absolute path
abs_path = os.path.abspath(rel_path)

# Change back to previous working directory
os.chdir(previous_cwd)
当前解决方案

abs_path = os.path.abspath(rel_path, cwd=special_cwd)
# Capture current working directory
previous_cwd = os.getcwd()

# Change to the new working directory
os.chdir(new_cwd)

# Convert relative path to absolute path
abs_path = os.path.abspath(rel_path)

# Change back to previous working directory
os.chdir(previous_cwd)
目前的解决方案似乎很笨拙,有没有更好的方法来实现这一点

目前的解决方案似乎很笨拙,有没有更好的方法来实现这一点

您可以将自己的代码编写为更改目录,然后再更改回:

>>> from contextlib import contextmanager

>>> @contextmanager
... def cwd(path):
...     from os import getcwd, chdir
...     cwd = getcwd()
...     chdir(path)
...     yield
...     chdir(cwd)
然后,实际代码看起来会更干净:

>>> os.getcwd()
'/home/user'

>>> with cwd('/usr/share'):
...     print(os.path.abspath('./test'))
... 
/usr/share/test

>>> os.getcwd()
'/home/user'

您使用的是什么Python版本?我使用的是Python 3.4,基于文档
abspath
通常与
normpath(join(os.getcwd(),path))相同
。那么它不是
normpath(join(new_-cwd,path))