在一个程序中,显然受到Java处理方式的影响,我想从解释器的PYTHONPATH中的目录中读取一个静态文件(实际上是一个日志配置文件)。我知道我可以这样做:
import foo
a = foo.__path__
conf = open(a[0] + "/logging.conf")
但我不知道这是否是“Pythonic”做事方式。如何以我的应用程序无需外部配置来读取它的方式分发日志记录配置文件?
答案 0 :(得分:1)
一般情况下,这很好,但我不确定你是否想要a[0]
以上(这只会给你路径的第一个字符),你应该使用os.path.join
而不是仅仅附加/
是跨平台兼容的。您可以考虑将路径规范化,即os.path.abspath(os.path.dirname(foo.__path__))
。请注意,如果__path__
在zip文件中或者正在使用其他导入技巧,它将无法工作,但我不担心(对于Python中的主程序,这与Java不同,这是不正常的)。
如果你确实想要支持压缩文件,那就是pkg_resources,但此时有点弃用(我在新的packaging模块中看不到相应的API)。
答案 1 :(得分:0)
这是基于Nix发布的线索链接的片段,但是以更具功能性的方式编写:
def search_path(pathname_suffix):
cands = [os.path.join(d,pathname_suffix) for d in sys.path]
try:
return filter(os.path.exists, cands)[0]
except IndexError:
return None