Skip to content

Can't decompress the lzma1900.7z file using py7zlib.Archive7z #65

Description

@funcman

This is my code:

import sys

if (sys.version_info > (3, 0)):
    import urllib.request as urllib
else:
    import urllib2 as urllib

import os
import py7zlib

def download(url, output):
    data = urllib.urlopen(url)
    with open(output, "wb") as f:
        f.write(data.read())

def check_dir(dir):
    if (os.path.isdir(dir)):
        pass
    else:
        os.makedirs(dir)

def dec_7z(file_name, output):
    with open(file_name, 'rb') as f:
        archive = py7zlib.Archive7z(f)
        for name in archive.getnames():
            print(name)
            outfilename = os.path.join(output, name)
            outdir = os.path.dirname(outfilename)
            check_dir(outdir)
            with open(outfilename, 'wb') as outfile:
                outfile.write(archive.getmember(name).read())

url = "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/lzma1900.7z/download"
file_name = "lzma1900.7z"

download(url, file_name)
dec_7z(file_name, "7z")

Run it, but get this:

...
Java/SevenZip/Compression/RangeCoder/Decoder.java
Java/SevenZip/Compression/RangeCoder/Encoder.java
Java/SevenZip/CRC.java
Java/SevenZip/ICodeProgress.java
Java/SevenZip/LzmaAlone.java
Traceback (most recent call last):
  File "down7z.py", line 37, in <module>
    dec_7z(file_name, "7z")
  File "down7z.py", line 31, in dec_7z
    outfile.write(archive.getmember(name).read())
  File "C:\ProgramData\Anaconda3\envs\py27\lib\site-packages\py7zlib.py", line 6
32, in read
    data = getattr(self, decoder)(coder, data, level, num_coders)
  File "C:\ProgramData\Anaconda3\envs\py27\lib\site-packages\py7zlib.py", line 7
02, in _read_lzma
    return self._read_from_decompressor(coder, dec, input, level, num_coders, wi
th_cache=True)
  File "C:\ProgramData\Anaconda3\envs\py27\lib\site-packages\py7zlib.py", line 6
70, in _read_from_decompressor
    tmp = decompressor.decompress(data)
ValueError: data error during decompression

And my env:

>uname
MINGW32_NT-6.1

>pip search pylzma
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Ple
ase upgrade your Python as Python 2.7 won't be maintained after that date. A fut
ure version of pip will drop support for Python 2.7.
pylzma (0.5.0)  - Python bindings for the LZMA library by Igor Pavlov.
  INSTALLED: 0.5.0 (latest)

Thanks!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions