2013-04-22 42 views
0

在Python腳本(在2.7執行),第二個語句返回false,雖然目錄存在:os.path.expanduser無法編碼反斜槓?

from os import path 
path.exists(path.expanduser('~')) 

我覺得這是一個反斜槓問題,因爲path.exists(...)使用或者「手工編碼的」主目錄按照預期,/\\返回true。

這個問題似乎有點特定於我的機器,因爲相同的腳本在其他計算機(也運行Windows)上工作正常。

是什麼導致了這種行爲?如何在不破壞腳本的情況下修復它(在大多數Windows機器上運行良好)?

更新

問題是由path.expanduser('~')造成包裝在引號(")我的系統上的路徑,而不是別人。

基本問題依然存在:爲什麼?

在我的機器上可以更改此行爲而不更改腳本(這不是由我維護並且適用於其他人)?

+1

那麼,在你遇到麻煩的系統上'os.path.expanduser('〜')'是什麼? – kindall 2013-04-22 15:28:28

+0

@ kindall:好點!它看起來像'path.expanduser(...)'在我的系統中引用了引號。我把它們誤認爲是「印刷品」的產物,這就是我沒有懷疑它們的原因。 – DCS 2013-04-22 15:58:24

回答

2

看着爲ntpath.py的源代碼,expanduser()函數首先試圖在順序返回環境變量HOME然後USERPROFILE,最後落回HOMEDRIVEHOMEPATH複合,所以我猜你有報價設置其中一個環境變量。

+0

就是這樣!我檢查了'USERPROFILE',但是我用一個引號設置了一個'HOME'變量。 – DCS 2013-04-22 16:14:12

0
from os import path 
path.exists(path.abspath(path.expanduser('~'))) 

有用嗎? (沒有測試但應該取代\/問題)

報價從Python文檔上path.exists()

返回真,如果路徑是指現有的路徑。對於 錯誤的符號鏈接返回False。在某些平臺上,如果未授予權限即可在 請求的文件上執行os.stat(),即使路徑物理上存在,此函數也可能返回 False。

+0

不,仍然返回false。 – DCS 2013-04-22 15:41:16

+0

'path.isdir(...)'工作嗎?你從'path.expanduser('〜')'輸出的是什麼? – Torxed 2013-04-22 15:42:32

+0

'path.isdir(...)'返回false,在'expanduser'中有或沒有包裝'abspath'。 – DCS 2013-04-22 15:47:13