Питон3: распаковать лзма.Файл 7z

Я хотел бы распаковать .Файл 7z. Согласно этому вопрос Я могу использовать lzma пакет для этого.

Я ожидал чего-то вроде

import lzma
#...
with lzma.open('myFile.7z') as f:
    f.extractall('.')

извлечь файл в текущую директорию, но кажется, что-то вроде этого не существует. Кроме того, пытается что-то вроде

import lzma
#...
with lzma.open('myFile.7z') as f:
    file_content = f.read()
    print(file_content)

произвел _lzma.LZMAError: Input format not supported by decoder. Как проверить формат? И я очень удивлен, потому что думал и 7zip, и the .Формат 7z являются открытым исходным кодом, и python должен поддерживать все.

Я видел много ответов, где люди просто вызывали исполняемый файл 7zip с подпроцессом, но это не хочу я хочу сделать. Я ищу простое решение python3.

1 ответов


LZMA и 7z два очень разные звери.

в простейшем из терминов LZMA является сжатие без потерь. Это означает, что вы подаете LZMA некоторые данные, он будет сжиматься и давать вам выход. Он не имеет никакого смысла файлов, папок или как их хранить.

7z с другой стороны является формат файла архива, и это означает, что 7z является полным пакетом. У вас есть несколько файлов и папок, кормить его в 7z, он будет аккуратно сжимайте их и храните в одном файле (архиве). Обратите внимание, что 7z использует LZMA и коктейль других алгоритмов для сжатия и хранения файлов в своем архиве 7z.

вот что Википедия должна сказать об двух:

С 7z представляет собой сжатый формат файла архива, который поддерживает несколько различных алгоритмов сжатия данных, шифрования и предварительной обработки.

цепной алгоритм Лемпеля-Зива-Маркова (LZMA) - это алгоритм, используемый для сжатия данных без потерь. Он разрабатывается либо с 1996 или 1998 году3 и впервые был использован в формате 7z 7-Zip архиватора.

короче говоря, вы не можете использовать LZMA для создания или извлечения файлов 7z. Насколько я знаю, нет никакого способа извлечь файл 7z с помощью python, кроме:

import os
os.system( '7z x archive.7z -oPath/to/Name' )