2015-06-04 101 views
2

我想展開一個絕對路徑的相對路徑。相對路徑有時會包含.,這需要從當前工作目錄中擴展出來。我想知道Python中的任何標準函數是否接受一個cwd kwarg,就像subprocess.popen一樣。你可以爲abspath設置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) 

目前的解決方案看起來笨重,有沒有更好的方式來做到這一點?

+0

什麼Python版本是你在用嗎? –

+0

我正在使用Python 3.4 –

+1

基於文檔'abspath'通常與'normpath(join(os.getcwd(),path))'相同。那麼它不會是'normpath(join(new_cwd,path))'? –

回答

1

目前的解決方案看起來笨重,有沒有更好的方法來實現這一目標?

您可以編寫自己的代碼作爲context manager這改變了目錄,然後變回:

>>> 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' 
相關問題