Python 3.2+shutilфункция
shutil.register_unpack_format()
архивы
Регистрирует свой формат для unpack_archive(): имя, список расширений и функцию распаковки.
Синтаксис
shutil.register_unpack_format(name, extensions, function, extra_args=None, description='')
Функция вызывается как function(filename, extract_dir, **kwargs). Расширение, уже занятое другим форматом, не перехватывается: регистрация падает с shutil.RegistryError, так что чужой '.zip' подменить нельзя — сначала unregister_unpack_format. Это поведение противоположно register_archive_format, который заменяет формат молча.
Примеры
import os, shutil
def unpack_lst(filename, extract_dir, **kwargs):
os.makedirs(extract_dir, exist_ok=True)
for line in open(filename).read().split():
open(os.path.join(extract_dir, line), 'w').close()
shutil.register_unpack_format('lst', ['.lst'], unpack_lst)
with open('files.lst', 'w') as f:
f.write('a.txt b.txt')
shutil.unpack_archive('files.lst', 'out')
print(sorted(os.listdir('out'))) # → ['a.txt', 'b.txt']
import shutil
try:
shutil.register_unpack_format('myzip', ['.zip'], lambda f, d: None)
except shutil.RegistryError as e:
print(e) # → .zip is already registered for "zip"
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности