Вы можете изменить arcnames
, взломав TarInfo
объекты, которые вы получаете от Tarfile.getmembers()
. Затем вы можете использовать Tarfile.extractall
, чтобы записать участников в выбранный пункт назначения под их новыми именами.
Например, следующая функция выберет элементы из произвольного поддерева архива и извлечет их в место назначения под их базовыми именами:
def extractTo(tar, dest, selector):
if type(selector) is str:
prefix = selector
selector = lambda m: m.name.startswith(prefix)
members = [m for m in tar.getmembers() if selector(m)]
for m in members:
m.name = os.path.basename(m.name)
tar.extractall(path = dest, members = members)
Предположим, tar
- это экземпляр TarFile
, представляющий архив с некоторыми членами в каталоге utilities/misc
, и вы хотели бы сложить эти элементы в каталог local/bin
. Вы могли бы сделать:
extractTo(tar, 'local/bin', 'utilities/misc/')
Обратите внимание на завершающий /
в префиксе каталога. Мы не хотим добавлять каталог misc
в `local / bin ', а просто его члены.