2016-12-07 77 views
0

我的代碼以下行:Python的檢查文件是否存在(返回false,應返回true)

tfPath = '\"' + os.environ["ProgramFiles(x86)"] + '\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe\"' 
if not os.path.exists(tfPath): 
    tfPath = 'TF.exe' 
cmd_str = '\"' + tfPath + ' checkout ' + '\"Files_to_checkout\"\"' 

我與文件所描述的在那裏,在"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe"測試。但是我的代碼總是跳進真正的分支,所以它從不承認文件實際存在。我在那裏做錯了什麼?

注意,出於測試目的,我做了一個os.system(cmd_str)與原tfPath,這工作得很好,所以該文件存在,它可以訪問,但是每次path.os.exists返回false。

+1

你嘗試起飛引號(最好使用os.path中.join而不是用反斜槓添加字符串) – Foon

+1

打印你的路徑,你會看到你有什麼。 – furas

回答

1

嘗試在第一次分配給tfPath時刪除多餘的引號。在系統調用中需要它們來保持嵌入式空間的路徑不被shell分割。但是調用os.path.exists並不需要引用它;其實,我認爲這將把'「爲文件名,不存在的部分

tfPath = os.environ["ProgramFiles(x86)"] + '\Microsoft Visual Studio 12.0\Common7\IDE\TF.exe' 
if not os.path.exists(tfPath): 
    tfPath = 'TF.exe' 
cmd_str = '\"' + tfPath + ' checkout ' + '\"Files_to_checkout\"\"' 

不知道是怎麼回事錯的嘗試:。

tfPath = os.path.join(os.environ["ProgramFiles(x86)"], 
    r'Microsoft Visual Studio 12.0\Common7\IDE\TF.exe') 
if os.path.exists(tfPath): 
    print('tfPath={} exists'.format(tfPath)) 
else: 
    print('tfPath={} does not exist'.format(tfPath)) 

(固定副本/粘貼錯誤其中\\正由\更換,所以我添加了一個原始字符串,r''指示器,所以上面的代碼段應該直接工作。另外,從GreenMat摻入建議,我取代使用+與呼叫os.path.join)字符串連接

+0

做到了,仍然失敗。 tfPath = os.environ [「ProgramFiles(x86)」] +'\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ TF.exe'\ n如果不是os.path.exists(tfPath):print「Fail」 – SinisterMJ

+0

@SinisterMJ - 刪除爲我工作的雙引號。雖然,我在該IDE目錄中沒有TF.exe文件,所以我必須創建一個虛擬文件。你確定這個文件真的存在嗎? – CAB

+0

是的,正如我所說的,如果我沒有真正測試該文件是否存在,而只是通過os.system()來執行它,它就會起作用。 – SinisterMJ

0

編輯答案:測試表明您提供的代碼產生以下路徑:

「C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ Common7 \ IDE \ TF.exe」

換句話說,您正在構建的路徑名包含雙引號。但是,它們不在實際的路徑規範中。這就是爲什麼你的代碼無法找到你想要的文件。

它是更Python和容易出錯建立使用os.path.join

它應該是這個樣子的路徑名少:

tfPath = os.path.join(os.environ["ProgramFiles(x86)"], 'Microsoft Visual Studio 12.0', 'Common7', 'IDE', 'TF.exe') 
相關問題