我该如何处理包所需的数据?

时间:2017-06-10 19:54:42

标签: python io packages

我有一个python包,需要一个数据文件才能工作。 目前我只是使用open("<filename>",'r')来读取数据。

但是,这取决于当前目录。我觉得有一些方法我应该告诉python在相对于包源的目录中查找文件,而不是相对于使用包的文件。

对于JVM语言,有一个“资源”目录,Class.getResource可以很好地工作。 python有一些等价物吗?如果没有,处理这个问题的标准方法是什么?

1 个答案:

答案 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包文件。