2012-05-18 39 views
0

我在Cygwin的命令提示符下運行python(2.7)。我通常將一個文件名傳遞給我的python代碼,並用以下命令檢索文件名:sys.argv [1]。我打開之前讓python檢查文件的存在(使用os.path.exists)。python:找不到當前目錄以外的文件

即使我將文件指定爲「../dir1/dir2/file_name」,這也起作用。截至今天,如果文件名包含路徑,Python無法找到任何文件(即使它們都在那裏)。

例如:在目錄中的prog.py稱爲DIR_1

python prog.py   file.txt  :::: works OK 

python prog.py ../dir_1/file.txt  :::: Fails 

>pwd 
    ......../dir_1 

我不斷收到「沒有這樣的文件或目錄」錯誤。我得到Python打印出它正在尋找的文件,它有一切OK(但它已經把../ etc變成了一個absloute路徑名)。

我有一種感覺soemthing可能有損壞的地方。有任何想法嗎?

拉斯

+0

您可能需要發佈一些圍繞此錯誤或至少回溯的代碼。正如@squiguy所建議的,你必須做一些事情來調用exists() – jdi

+0

我安裝了Cygwin並測試了它,它似乎處理相對路徑就好了。我可以在'../../ file.txt'上成功使用'os.path.exists',並且我也可以使用這種表示法來打開它。你可能想檢查你的cygwin版本或其他東西。這個問題太模糊,不可重複。你可以用一個如何重現問題的實例來更新你的問題嗎? – jdi

回答

0

您需要解決這些相對引用到適當的擴展路徑。

import os 

relative = "../" 
print os.path.abspath(relative) 
# /Users/jdi 

它的工作正常與您當前目錄中的文件,因爲它不需要解決任何問題。但是shell路徑需要擴展。

0

os.path.exists()不檢查你作爲參數傳遞的路徑是否存在?你想看看文件是否存在?

+0

這是真的。 OP必須做一些超出此事的事情纔會導致錯誤。 – jdi

+0

也許它是權限?你可能只想看看你傳遞的參數是否是一個文件,試圖打開它並捕獲一個異常,如果它失敗,就像這樣 嘗試: 打開() 除了IOError作爲e: print'無法打開文件' – squiguy

+0

我正試圖打開該文件。我使用的代碼,因爲你建議squiguy。當它打開失敗時,我打印出文件名。它將相對引用擴展爲完整路徑 - 所以不確定這是否是問題@jdi。雖然文件名被擴展爲:/ cygwin/c/Users/russ/......,而「os.path.abspath(relative):gets返回爲c:\ Users \ russ \ .....程序(和其他一些編碼相同的程序)都在昨天工作,現在它們似乎都有相對路徑 - 包含任何文件 - 所以我認爲它也不是允許的。 – user1402377

0

這是我的理解是,Python不理解UNIX的快捷鍵,如 '波浪線':

~/Downloads 

都不行 但是,這將:

/home/Castro/Downloads 

這是否解決您的問題?

相關問題