Как питоном загрузить ресурс из jar файла?

Рейтинг: 4Ответов: 1Опубликовано: 27.02.2015

Всем привет. Я в python/jython новичок.

Возникла проблема: надо загрузить файлы из определенного каталога.
Локально, никаких проблем

for name in glob.glob("%s/*.json" % some_path):
    log.debug(name)
    definition = json.loads(file(name).read())

Проблемма вот в чем: основная аппликация на java распространяется как jar(s), и все ресурсы тоже сидят в jar'e.

Путь к папке ресурсов определяется в jave:

URL resourceURL = CommonMethods.class.getClassLoader().getResource(resourceName);
String resourcePath = resourceURL.getPath();
String dirPath = resourcePath.substring(0, resourcePath.lastIndexOf("/")+1);

Если ресурс в jar'e, то получаем

dirPath="file:/opt/lib/core-lib-1.0.jar!/rulz/"

И glob.glob() не работает, думаю, что file(name).read() тоже. :(

Подскажите, как читать файлы питоном из jar'a?

Ответы

▲ 4Принят

А вот так не подойдет?

def show_jar_classes(jar_file):
    """prints out .class files from jar_file"""
    zf = zipfile.ZipFile(jar_file, 'r')
    try:
        lst = zf.infolist()
        for zi in lst:
            fn = zi.filename
            if fn.endswith('.class'):
                print(fn)
    finally:
        zf.close()

То есть действуем так как-будто jar эквивалентен zip (взял здесь).