Рубрики
Без рубрики

Python: распространение файлов поддержки данных в ZIP

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

На днях я слышал, что когда мы переводим некоторые из наших сценариев на нашу партию фермы, мы не можем передавать подпункты. Так что, если у меня есть структура каталогов, как следующее, она должна быть сплющена:

Вершина -> Данные -> шрифт -> Изображения

Вместо того, чтобы иметь подпапки для моих шрифтов, изображений и т. Д. Мне нужно было поставить все свои файлы поддержки в основной каталог. Я думал, что это довольно хромает, как я хотел бы организовать свои каталоги. Если вы следуете модели View-Controller (MVC) с вашим кодом, вы найдете эту симпатичную раздражающую тоже. Поэтому я немного подумал об этом вопросе и понял, что Python может получить доступ к файлам из архива ZIP, используя zipfile библиотека или через некоторую магию от Zipimport Отказ Теперь я мог использовать zipfile, но я хотел, чтобы возможность импортировать мои файлы Python, если бы у меня были их в подсыпальке, или если я просто хотел их в верхнем разделе Zip Archive, поэтому я решил пойти на волшебный маршрут.

Теперь вы не должны использовать Zipimport напрямую. Это на самом деле часть механизма импорта Python и включено по умолчанию. Таким образом, мы не будем использовать его в нашем коде, однако я думаю, что вы должны знать, что это делает вещи за кулисами. В любом случае, только для дополнительного фона, я создаю много пользовательских PDF, используя различные логотипы и шрифты. Таким образом, я обычно сохраняю эти файлы в отдельных каталогах, чтобы они организовали. Я также использую много файлов конфигурации, так как некоторые клиенты хотят, чтобы все было сделано в одну сторону, а некоторые другие. Поэтому я собираюсь показать вам действительно простой фрагмент кода, который вы можете использовать для импорта файлов Python и извлекать файл конфигурации. Для последнего мы будем использовать Handy Pkgutil Python Pkgutil.

Вот код:

import os
import pkgutil
import StringIO
import sys
from configobj import ConfigObj

base = os.path.dirname(os.path.abspath( __file__ ))
zpath = os.path.join(base, "test.zip")
sys.path.append(zpath)

import hello

#----------------------------------------------------------------------
def getCfgFromZip():
    """
    Extract the config file from the zip file
    """
    cfg_data = pkgutil.get_data("config", "config.ini")
    print cfg_data
    fileLikeObj = StringIO.StringIO(cfg_data)
    cfg = ConfigObj(fileLikeObj)
    cfg_dict = cfg.dict()
    print cfg_dict
    
if __name__ == "__main__":
    getCfgFromZip()

Теперь у нас также есть ZIP-архив под названием test.zip рядом с этим скриптом, который содержит следующее:

  • hello.py
  • Папка с именем config, которая содержит два файла: config.ini.ini и __init__.py

Как видите, Python знает, что он может импортировать модуль Hello, потому что мы добавили архив на путей импорта через sys.path.append Отказ Все модули Hello Print – это распечатать сообщение для STDOUT. Чтобы извлечь файл конфигурации, мы используем pkgutil.get_data (polder_name, file_name). Это возвращает строку. Поскольку мы хотим загрузить конфиг в Configobj, нам нужно сделать эту строку в файловой объект, поэтому мы используем Stringio для этой цели. Вы можете сделать то же самое с изображениями. PKGUTIL вернет строку двоичных байтов, которые вы можете передать в библиотеку визуализации Phython или Python для дальнейшей обработки. Я добавил операторы печати, чтобы вы могли видеть, какие исходные данные выглядели как и какие настройки выходов.

Это все, что есть к этому. Я думал, что это довольно удобно, и я надеюсь, что вы найдете его полезным в своей работе.

Дальнейшее чтение

Скачать источник

  • Pyextract.zip.