我有一個文件的結構是這樣的:Python:獲取妹妹目錄中的文件路徑?
data
mydata.xls
scripts
myscript.py
從myscript.py內,我怎麼能得到mydata.xls的文件路徑?
我需要通過它來xlrd:似乎
book = xlrd.open_workbook(filename)
和相對文件路徑,如」 ../data/mydata.xls'不工作。
我有一個文件的結構是這樣的:Python:獲取妹妹目錄中的文件路徑?
data
mydata.xls
scripts
myscript.py
從myscript.py內,我怎麼能得到mydata.xls的文件路徑?
我需要通過它來xlrd:似乎
book = xlrd.open_workbook(filename)
和相對文件路徑,如」 ../data/mydata.xls'不工作。
您可以使用os.path.abspath(<relpath>)
從相對路徑獲取絕對路徑。
[email protected]:~/p/f$ more a.py
import os
print os.path.abspath('../g/a')
[email protected]:~/p/f$ python a.py
/home/vinko/p/g/a
的目錄結構:
[email protected]:~/p$ tree
.
|-- f
| `-- a.py
`-- g
`-- a
2 directories, 2 files
import os
directory = os.path.dirname(os.getcwd())
final = os.path.join(directory, 'data', 'mydata.xls')
或者乾脆
os.path.abspath('../data/mydata.xls')
如果你想嘗試
os.path.join(os.path.dirname(__file__), '../data/mydata.xls')
以使其獨立於當前目錄
特殊變量__file__
包含使用它的腳本的相對路徑。請記住,當使用REPL解釋器時,__file__
未定義。
從您的意見,似乎book = xlrd.open_workbook(filename)
不喜歡相對路徑。您可以創建相對於當前文件__file__
的路徑,然後採取將刪除相關部分(..
)
import os
filename = os.path.join(os.path.dirname(__file__), '../data/mydata.xls')
book = xlrd.open_workbook(os.path.abspath(filename))
-1似乎你不明白「..」相對路徑是相對於*當前工作目錄*而OP需要一個相對於他的*腳本目錄*的路徑;與'xlrd'完全沒有關係。其次'__file__'是*當前正在執行的文件*的路徑,如果OP想要將其代碼放入導入的實用程序模塊中,則無效。 – 2010-09-25 22:59:52
@John我沒有看到我的答案與以前的答案有什麼不同,除了我刪除了路徑「相對」部分。我簡單地混合了溫科和亞當的答案。我的解釋是否給了我一個反對票? OP不會談論相關目錄,而是從他的myscript.py文件中討論。我同意,如果使用__file__在模塊中使用,但OP沒有指定它,則它是沒用的。 – Rod 2010-09-26 00:37:56
其他答案不包括你的愚蠢的第一句話。 xlrd.open_workbook()只是將未修改的文件名傳遞給內置的「open()」 - 「不喜歡相對路徑」是無稽之談。 – 2010-09-26 04:20:29
你什麼錯誤信息的絕對路徑?你從哪裏開始你的腳本? – eumiro 2010-09-21 09:22:28