lzma
— Compression using the LZMA algorithm¶
Added in version 3.3.
Source code: Lib/lzma.py
This module provides classes and convenience functions for compressing and
decompressing data using the LZMA compression algorithm. Also included is a file
interface supporting the .xz
and legacy .lzma
file formats used by the
xz utility, as well as raw compressed streams.
The interface provided by this module is very similar to that of the bz2
module. Note that LZMAFile
and bz2.BZ2File
are not
thread-safe, so if you need to use a single LZMAFile
instance
from multiple threads, it is necessary to protect it with a lock.
- exception lzma.LZMAError¶
This exception is raised when an error occurs during compression or decompression, or while initializing the compressor/decompressor state.
Reading and writing compressed files¶
- lzma.open(filename, mode='rb', *, format=None, check=-1, preset=None, filters=None, encoding=None, errors=None, newline=None)¶
Open an LZMA-compressed file in binary or text mode, returning a file object.
The filename argument can be either an actual file name (given as a
str
,bytes
or path-like object), in which case the named file is opened, or it can be an existing file object to read from or write to.The mode argument can be any of
"r"
,"rb"
,"w"
,"wb"
,"x"
,"xb"
,"a"
or"ab"
for binary mode, or"rt"
,"wt"
,"xt"
, or"at"
for text mode. The default is"rb"
.When opening a file for reading, the format and filters arguments have the same meanings as for
LZMADecompressor
. In this case, the check and preset arguments should not be used.When opening a file for writing, the format, check, preset and filters arguments have the same meanings as for
LZMACompressor
.For binary mode, this function is equivalent to the
LZMAFile
constructor:LZMAFile(filename, mode, ...)
. In this case, the encoding, errors and newline arguments must not be provided.For text mode, a
LZMAFile
object is created, and wrapped in anio.TextIOWrapper
instance with the specified encoding, error handling behavior, and line ending(s).Changed in version 3.4: Added support for the
"x"
,"xb"
and"xt"
modes.Changed in version 3.6: Accepts a path-like object.
- class lzma.LZMAFile(filename=None, mode='r', *, format=None, check=-1, preset=None, filters=None)¶
Open an LZMA-compressed file in binary mode.
An
LZMAFile
can wrap an already-open file object, or operate directly on a named file. The filename argument specifies either the file object to wrap, or the name of the file to open (as astr
,bytes
or path-like object). When wrapping an existing file object, the wrapped file will not be closed when theLZMAFile
is closed.The mode argument can be either
"r"
for reading (default),"w"
for overwriting,"x"
for exclusive creation, or"a"
for appending. These can equivalently be given as"rb"
,"wb"
,"xb"
and"ab"
respectively.If filename is a file object (rather than an actual file name), a mode of
"w"
does not truncate the file, and is instead equivalent to"a"
.When opening a file for reading, the input file may be the concatenation of multiple separate compressed streams. These are transparently decoded as a single logical stream.
When opening a file for reading, the format and filters arguments have the same meanings as for
LZMADecompressor
. In this case, the check and preset arguments should not be used.When opening a file for writing, the format, check, preset and filters arguments have the same meanings as for
LZMACompressor
.LZMAFile
supports all the members specified byio.BufferedIOBase
, except fordetach()
andtruncate()
. Iteration and thewith
statement are supported.The following method and attributes are also provided:
- peek(size=-1)¶
Return buffered data without advancing the file position. At least one byte of data will be returned, unless EOF has been reached. The exact number of bytes returned is unspecified (the size argument is ignored).
- mode¶
'rb'
for reading and'wb'
for writing.Added in version 3.13.
- name¶
The lzma file name. Equivalent to the
name
attribute of the underlying file object.Added in version 3.13.
Changed in version 3.4: Added support for the
"x"
and"xb"
modes.Changed in version 3.5: The
read()
method now accepts an argument ofNone
.Changed in version 3.6: Accepts a path-like object.
Compressing and decompressing data in memory¶
- class lzma.LZMACompressor(format=FORMAT_XZ, check=-1, preset=None, filters=None)¶
Create a compressor object, which can be used to compress data incrementally.
For a more convenient way of compressing a single chunk of data, see
compress()
.The format argument specifies what container format should be used. Possible values are:
FORMAT_XZ
: The.xz
container format.This is the default format.
FORMAT_ALONE
: The legacy.lzma
container format.This format is more limited than
.xz
– it does not support integrity checks or multiple filters.
FORMAT_RAW
: A raw data stream, not using any container format.This format specifier does not support integrity checks, and requires that you always specify a custom filter chain (for both compression and decompression). Additionally, data compressed in this manner cannot be decompressed using
FORMAT_AUTO
(seeLZMADecompressor
).
The check argument specifies the type of integrity check to include in the compressed data. This check is used when decompressing, to ensure that the data has not been corrupted. Possible values are:
CHECK_NONE
: No integrity check. This is the default (and the only acceptable value) forFORMAT_ALONE
andFORMAT_RAW
.CHECK_CRC32
: 32-bit Cyclic Redundancy Check.CHECK_CRC64
: 64-bit Cyclic Redundancy Check. This is the default forFORMAT_XZ
.CHECK_SHA256
: 256-bit Secure Hash Algorithm.
If the specified check is not supported, an
LZMAError
is raised.The compression settings can be specified either as a preset compression level (with the preset argument), or in detail as a custom filter chain (with the filters argument).
The preset argument (if provided) should be an integer between
0
and9
(inclusive), optionally OR-ed with the constantPRESET_EXTREME
. If neither preset nor filters are given, the default behavior is to usePRESET_DEFAULT
(preset level6
). Higher presets produce smaller output, but make the compression process slower.Note
In addition to being more CPU-intensive, compression with higher presets also requires much more memory (and produces output that needs more memory to decompress). With preset
9
for example, the overhead for anLZMACompressor
object can be as high as 800 MiB. For this reason, it is generally best to stick with the default preset.The filters argument (if provided) should be a filter chain specifier. See Specifying custom filter chains for details.
- compress(data)¶
Compress data (a
bytes
object), returning abytes
object containing compressed data for at least part of the input. Some of data may be buffered internally, for use in later calls tocompress()
andflush()
. The returned data should be concatenated with the output of any previous calls tocompress()
.
- class lzma.LZMADecompressor(format=FORMAT_AUTO, memlimit=None, filters=None)¶
Create a decompressor object, which can be used to decompress data incrementally.
For a more convenient way of decompressing an entire compressed stream at once, see
decompress()
.The format argument specifies the container format that should be used. The default is
FORMAT_AUTO
, which can decompress both.xz
and.lzma
files. Other possible values areFORMAT_XZ
,FORMAT_ALONE
, andFORMAT_RAW
.The memlimit argument specifies a limit (in bytes) on the amount of memory that the decompressor can use. When this argument is used, decompression will fail with an