我有一个python包,需要一个数据文件才能工作。
目前我只是使用open("<filename>",'r')
来读取数据。
但是,这取决于当前目录。我觉得有一些方法我应该告诉python在相对于包源的目录中查找文件,而不是相对于使用包的文件。
对于JVM语言,有一个“资源”目录,Class.getResource
可以很好地工作。 python有一些等价物吗?如果没有,处理这个问题的标准方法是什么?
答案 0 :(得分:2)
模块通常具有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
这里有{em>相对文件到var Xmas95 = new Date('December 25, 1995 23:15:30');
var month = Xmas95.getMonth();
console.log(month); // 11
包文件。