通过模块和另一个目录中的文本文件加载数据

时间:2013-08-24 03:15:56

标签: python

我有目录结构:

main/
__init__.py
     foo/
         __init__.py
         names.py
         names.pickle
     bar/
         __init__.py
         my_module.py

names.py具有与names.pickle一起使用的代码,包括加载pickle数据。

但是,如果我这样做,请在my_module.py中执行:

from main.foo import names

然后我从main / bar运行my_module.py,Python向我抱怨它找不到names.pickle,大概是因为它看起来在main / bar /里面,而不是main / foo /.

建议的解决方法是什么?是暂时更改os.curdir吗?

2 个答案:

答案 0 :(得分:2)

您应该使用names.py的文件位置来查找names.pickle

from main.foo import names
import os

names_pickle = os.path.join(os.path.dirname(names.__file__), 'names.pickle')

每个模块都有一个__file__属性,告诉它在文件系统中的位置。

答案 1 :(得分:0)

您还可以使用inspect模块:

import inspect
from main.foo import names

names_pickle = os.path.join(os.path.dirname(inspect.getfile(names)), 'names.pickle')