Python中相当于Java的Class.getResource的是什么?
我在PYTHONPATH上有一些XML文件,我想通过PYTHONPATH中的路径来加载它们,而不是通过文件系统中的相对路径或绝对路径。虽然我可以把它们直接写成字符串放在一个Python模块里(多行字符串真是太方便了),然后用普通的import
语句来加载,但如果可以的话,我还是希望把它们保留为独立的XML文件。在Java中,解决这个问题的方法是使用Class.getResource方法,我想知道在Python中是否有类似的解决方案。
2 个回答
7
我不知道有没有现成的功能,但下面的代码应该可以模拟这种行为(假设文件是在本地磁盘上——我认为PYTHONPATH不支持非本地的文件路径,而Java的类路径可以包含指向远程资源的URL)。
def get_pypath_resource(resource_name):
for path in sys.path:
if os.path.exists(os.path.join(path, resource_name)):
return os.path.join(path, resource_name)
raise Exception('Resource %s could not be found' % resource_name)
8
看看这个 pkg_resources,它里面有一些可以用来处理通用资源的接口。这个东西主要是为了和Python的“蛋”(egg)一起使用的,所以如果你需要的话,它可能会帮你做更多的事情。
这里有个文档里的例子:
import pkg_resources
my_data = pkg_resources.resource_string(__name__, "foo.dat")