一個模塊通常有一個__file__
屬性,以告知包的來源。例如,對於re
:
>>> import re
>>> re.__file__
'/usr/lib/python3.5/re.py'
>>> os.path.dirname(re.__file__)
'/usr/lib/python3.5'
或flask
:
>>> import flask
>>> flask.__file__
'/home/foo/.local/lib/python3.5/site-packages/flask/__init__.py'
>>> os.path.dirname(flask.__file__)
'/home/foo/.local/lib/python3.5/site-packages/flask'
然後可以使用os.path.dirname
獲取目錄,並使用os.path.join
與新的文件名一起加入的路徑。
所以說,你要一個文件加載相對於re
包,你可以使用:
import re
import os
with open(os.path.join(os.path.dirname(re.__file__),'foo.data'),'r') as f:
# ^relative pathname
pass
隨着'foo.data'
此文件相對到re
包文件。
這似乎工作。有一件事,在''../foo.data''中使用正斜槓嚴格正確嗎? path.join似乎使我的Windows機器上的'\\ a \\ b \\ ../ foo.data',它可以處理,但我可以想象其他方式不是很好。 – Lucas
@Lucas:好點。我對Linux有點太習慣了。所以最好安全,不要抱歉。 –