### 导航

- [索引](../genindex.xhtml "总目录")

- [模块](../py-modindex.xhtml "Python 模块索引") |

- [下一页](zipfile.xhtml "zipfile --- 在 ZIP 归档中工作") |

- [上一页](bz2.xhtml "bz2 --- 对 bzip2 压缩算法的支持") |

- ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png)

- [Python](https://www.python.org/) »

- zh\_CN 3.7.3 [文档](../index.xhtml) »

- [Python 标准库](index.xhtml) »

- [数据压缩和存档](archiving.xhtml) »

- $('.inline-search').show(0); |

# [`lzma`](#module-lzma "lzma: A Python wrapper for the liblzma compression library.") --- 用 LZMA 算法压缩

3\.3 新版功能.

**源代码:** [Lib/lzma.py](https://github.com/python/cpython/tree/3.7/Lib/lzma.py) \[https://github.com/python/cpython/tree/3.7/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`](bz2.xhtml#module-bz2 "bz2: Interfaces for bzip2 compression and decompression.")module. However, note that [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile") is *not* thread-safe, unlike [`bz2.BZ2File`](bz2.xhtml#bz2.BZ2File "bz2.BZ2File"), so if you need to use a single [`LZMAFile`](#lzma.LZMAFile "lzma.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](../glossary.xhtml#term-file-object).

The *filename* argument can be either an actual file name (given as a [`str`](stdtypes.xhtml#str "str"), [`bytes`](stdtypes.xhtml#bytes "bytes") or [path-like](../glossary.xhtml#term-path-like-object) 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`](#lzma.LZMADecompressor "lzma.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`](#lzma.LZMACompressor "lzma.LZMACompressor").

For binary mode, this function is equivalent to the [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile")constructor: `LZMAFile(filename, mode, ...)`. In this case, the *encoding*, *errors* and *newline* arguments must not be provided.

For text mode, a [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile") object is created, and wrapped in an [`io.TextIOWrapper`](io.xhtml#io.TextIOWrapper "io.TextIOWrapper") instance with the specified encoding, error handling behavior, and line ending(s).

在 3.4 版更改: Added support for the `"x"`, `"xb"` and `"xt"` modes.

在 3.6 版更改: 接受一个 [类路径对象](../glossary.xhtml#term-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`](#lzma.LZMAFile "lzma.LZMAFile") can wrap an already-open [file object](../glossary.xhtml#term-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 a [`str`](stdtypes.xhtml#str "str"), [`bytes`](stdtypes.xhtml#bytes "bytes") or [path-like](../glossary.xhtml#term-path-like-object) object). When wrapping an existing file object, the wrapped file will not be closed when the [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile") 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`](#lzma.LZMADecompressor "lzma.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`](#lzma.LZMACompressor "lzma.LZMACompressor").

[`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile") supports all the members specified by [`io.BufferedIOBase`](io.xhtml#io.BufferedIOBase "io.BufferedIOBase"), except for `detach()` and `truncate()`. Iteration and the [`with`](../reference/compound_stmts.xhtml#with) statement are supported.

The following method is 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).

注解

While calling [`peek()`](#lzma.LZMAFile.peek "lzma.LZMAFile.peek") does not change the file position of the [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile"), it may change the position of the underlying file object (e.g. if the [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile") was constructed by passing a file object for *filename*).

在 3.4 版更改: Added support for the `"x"` and `"xb"` modes.

在 3.5 版更改: The [`read()`](io.xhtml#io.BufferedIOBase.read "io.BufferedIOBase.read") method now accepts an argument of `None`.

在 3.6 版更改: 接受一个 [类路径对象](../glossary.xhtml#term-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()`](#lzma.compress "lzma.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` (see [`LZMADecompressor`](#lzma.LZMADecompressor "lzma.LZMADecompressor")).

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) for `FORMAT_ALONE` and `FORMAT_RAW`.

- `CHECK_CRC32`: 32-bit Cyclic Redundancy Check.

- `CHECK_CRC64`: 64-bit Cyclic Redundancy Check. This is the default for `FORMAT_XZ`.

- `CHECK_SHA256`: 256-bit Secure Hash Algorithm.

If the specified check is not supported, an [`LZMAError`](#lzma.LZMAError "lzma.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` and `9` (inclusive), optionally OR-ed with the constant `PRESET_EXTREME`. If neither *preset* nor *filters* are given, the default behavior is to use `PRESET_DEFAULT` (preset level `6`). Higher presets produce smaller output, but make the compression process slower.

注解

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 an [`LZMACompressor`](#lzma.LZMACompressor "lzma.LZMACompressor") 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](#filter-chain-specs) for details.

`compress`(*data*)Compress *data* (a [`bytes`](stdtypes.xhtml#bytes "bytes") object), returning a [`bytes`](stdtypes.xhtml#bytes "bytes")object containing compressed data for at least part of the input. Some of *data* may be buffered internally, for use in later calls to [`compress()`](#lzma.compress "lzma.compress") and [`flush()`](#lzma.LZMACompressor.flush "lzma.LZMACompressor.flush"). The returned data should be concatenated with the output of any previous calls to [`compress()`](#lzma.compress "lzma.compress").

`flush`()Finish the compression process, returning a [`bytes`](stdtypes.xhtml#bytes "bytes") object containing any data stored in the compressor's internal buffers.

The compressor cannot be used after this method has been called.

*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()`](#lzma.decompress "lzma.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 are `FORMAT_XZ`, `FORMAT_ALONE`, and `FORMAT_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 [`LZMAError`](#lzma.LZMAError "lzma.LZMAError") if it is not possible to decompress the input within the given memory limit.

The *filters* argument specifies the filter chain that was used to create the stream being decompressed. This argument is required if *format* is `FORMAT_RAW`, but should not be used for other formats. See [Specifying custom filter chains](#filter-chain-specs) for more information about filter chains.

注解

This class does not transparently handle inputs containing multiple compressed streams, unlike [`decompress()`](#lzma.decompress "lzma.decompress") and [`LZMAFile`](#lzma.LZMAFile "lzma.LZMAFile"). To decompress a multi-stream input with [`LZMADecompressor`](#lzma.LZMADecompressor "lzma.LZMADecompressor"), you must create a new decompressor for each stream.

`decompress`(*data*, *max\_length=-1*)Decompress *data* (a [bytes-like object](../glossary.xhtml#term-bytes-like-object)), returning uncompressed data as bytes. Some of *data* may be buffered internally, for use in later calls to [`decompress()`](#lzma.decompress "lzma.decompress"). The returned data should be concatenated with the output of any previous calls to [`decompress()`](#lzma.decompress "lzma.decompress").

If *max\_length* is nonnegative, returns at most *max\_length*bytes of decompressed data. If this limit is reached and further output can be produced, the [`needs_input`](#lzma.LZMADecompressor.needs_input "lzma.LZMADecompressor.needs_input") attribute will be set to `False`. In this case, the next call to [`decompress()`](#lzma.LZMADecompressor.decompress "lzma.LZMADecompressor.decompress") may provide *data* as `b''` to obtain more of the output.

If all of the input data was decompressed and returned (either because this was less than *max\_length* bytes, or because *max\_length* was negative), the [`needs_input`](#lzma.LZMADecompressor.needs_input "lzma.LZMADecompressor.needs_input") attribute will be set to `True`.

Attempting to decompress data after the end of stream is reached raises an EOFError. Any data found after the end of the stream is ignored and saved in the [`unused_data`](#lzma.LZMADecompressor.unused_data "lzma.LZMADecompressor.unused_data") attribute.

在 3.5 版更改: Added the *max\_length* parameter.

`check`The ID of the integrity check used by the input stream. This may be `CHECK_UNKNOWN` until enough of the input has been decoded to determine what integrity check it uses.

`eof`若达到了数据流末尾标识符则为 `True`。

`unused_data`压缩数据流的末尾还有数据。

Before the end of the stream is reached, this will be `b""`.

`needs_input``False` if the [`decompress()`](#lzma.LZMADecompressor.decompress "lzma.LZMADecompressor.decompress") method can provide more decompressed data before requiring new uncompressed input.

3\.5 新版功能.

`lzma.``compress`(*data*, *format=FORMAT\_XZ*, *check=-1*, *preset=None*, *filters=None*)Compress *data* (a [`bytes`](stdtypes.xhtml#bytes "bytes") object), returning the compressed data as a [`bytes`](stdtypes.xhtml#bytes "bytes") object.

See [`LZMACompressor`](#lzma.LZMACompressor "lzma.LZMACompressor") above for a description of the *format*, *check*, *preset* and *filters* arguments.

`lzma.``decompress`(*data*, *format=FORMAT\_AUTO*, *memlimit=None*, *filters=None*)Decompress *data* (a [`bytes`](stdtypes.xhtml#bytes "bytes") object), returning the uncompressed data as a [`bytes`](stdtypes.xhtml#bytes "bytes") object.

If *data* is the concatenation of multiple distinct compressed streams, decompress all of these streams, and return the concatenation of the results.

See [`LZMADecompressor`](#lzma.LZMADecompressor "lzma.LZMADecompressor") above for a description of the *format*, *memlimit* and *filters* arguments.

## 杂项

`lzma.``is_check_supported`(*check*)Returns true if the given integrity check is supported on this system.

`CHECK_NONE` and `CHECK_CRC32` are always supported. `CHECK_CRC64` and `CHECK_SHA256` may be unavailable if you are using a version of **liblzma** that was compiled with a limited feature set.

## Specifying custom filter chains

A filter chain specifier is a sequence of dictionaries, where each dictionary contains the ID and options for a single filter. Each dictionary must contain the key `"id"`, and may contain additional keys to specify filter-dependent options. Valid filter IDs are as follows:

- Compression filters:

- `FILTER_LZMA1` (for use with `FORMAT_ALONE`)

- `FILTER_LZMA2` (for use with `FORMAT_XZ` and `FORMAT_RAW`)

- Delta filter:

- `FILTER_DELTA`

- Branch-Call-Jump (BCJ) filters:

- `FILTER_X86`

- `FILTER_IA64`

- `FILTER_ARM`

- `FILTER_ARMTHUMB`

- `FILTER_POWERPC`

- `FILTER_SPARC`

A filter chain can consist of up to 4 filters, and cannot be empty. The last filter in the chain must be a compression filter, and any other filters must be delta or BCJ filters.

Compression filters support the following options (specified as additional entries in the dictionary representing the filter):

> - `preset`: A compression preset to use as a source of default values for options that are not specified explicitly.

> - `dict_size`: Dictionary size in bytes. This should be between 4 KiB and 1.5 GiB (inclusive).

> - `lc`: Number of literal context bits.

> - `lp`: Number of literal position bits. The sum `lc + lp` must be at most 4.

> - `pb`: Number of position bits; must be at most 4.

> - `mode`: `MODE_FAST` or `MODE_NORMAL`.

> - `nice_len`: What should be considered a "nice length" for a match. This should be 273 or less.

> - `mf`: What match finder to use -- `MF_HC3`, `MF_HC4`, `MF_BT2`, `MF_BT3`, or `MF_BT4`.

> - `depth`: Maximum search depth used by match finder. 0 (default) means to select automatically based on other filter options.

The delta filter stores the differences between bytes, producing more repetitive input for the compressor in certain circumstances. It supports one option, `dist`. This indicates the distance between bytes to be subtracted. The default is 1, i.e. take the differences between adjacent bytes.

The BCJ filters are intended to be applied to machine code. They convert relative branches, calls and jumps in the code to use absolute addressing, with the aim of increasing the redundancy that can be exploited by the compressor. These filters support one option, `start_offset`. This specifies the address that should be mapped to the beginning of the input data. The default is 0.

## 示例

Reading in a compressed file:

```

import lzma

with lzma.open("file.xz") as f:

file_content = f.read()

```

Creating a compressed file:

```

import lzma

data = b"Insert Data Here"

with lzma.open("file.xz", "w") as f:

f.write(data)

```

Compressing data in memory:

```

import lzma

data_in = b"Insert Data Here"

data_out = lzma.compress(data_in)

```

Incremental compression:

```

import lzma

lzc = lzma.LZMACompressor()

out1 = lzc.compress(b"Some data\n")

out2 = lzc.compress(b"Another piece of data\n")

out3 = lzc.compress(b"Even more data\n")

out4 = lzc.flush()

# Concatenate all the partial results:

result = b"".join([out1, out2, out3, out4])

```

Writing compressed data to an already-open file:

```

import lzma

with open("file.xz", "wb") as f:

f.write(b"This data will not be compressed\n")

with lzma.open(f, "w") as lzf:

lzf.write(b"This *will* be compressed\n")

f.write(b"Not compressed\n")

```

Creating a compressed file using a custom filter chain:

```

import lzma

my_filters = [

{"id": lzma.FILTER_DELTA, "dist": 5},

{"id": lzma.FILTER_LZMA2, "preset": 7 | lzma.PRESET_EXTREME},

]

with lzma.open("file.xz", "w", filters=my_filters) as f:

f.write(b"blah blah blah")

```

### 导航

- [索引](../genindex.xhtml "总目录")

- [模块](../py-modindex.xhtml "Python 模块索引") |

- [下一页](zipfile.xhtml "zipfile --- 在 ZIP 归档中工作") |

- [上一页](bz2.xhtml "bz2 --- 对 bzip2 压缩算法的支持") |

- ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png)

- [Python](https://www.python.org/) »

- zh\_CN 3.7.3 [文档](../index.xhtml) »

- [Python 标准库](index.xhtml) »

- [数据压缩和存档](archiving.xhtml) »

- $('.inline-search').show(0); |

© [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation.

Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/)

最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)?

使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。

python 压缩算法_lzma — 用 LZMA 算法压缩相关推荐

  1. python:lzma --- 用 LZMA 算法压缩

    python:lzma --- 用 LZMA 算法压缩 读写压缩文件 在内存中压缩和解压缩数据 杂项 指定自定义的过滤器链 例子 此模块提供了可以压缩和解压缩使用 LZMA 压缩算法的数据的类和便携函 ...

  2. c语言lzma算法,C语言编程使用lzma SDK对7z文件简略解压缩

    有时候我们只需要单纯对lzma算法压缩的7z文件进行解压,有时需要在嵌入式设备上解压,使用p7zip虽然支持多种格式,但是不容易裁剪,使用lzma SDK是首选: 可以在这里找到各种版本:http:/ ...

  3. lzma算法_十款性能最佳的压缩算法

    数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程.它的原理是消除不必要的数据或以更高效的格式重新组织数据.在进行数据压缩时,你可以选择使用有损方法或无损方法.有损方法会永久性地擦除掉一些数据, ...

  4. 【步兵 工具篇】lzma算法,压缩字节流

    [步兵 工具篇]lzma算法,压缩字节流 by EOS. 本来上周就打算写的,不过孩子连续高烧,住院了一个礼拜.一个礼拜没回家,还写什么博客. 虽然花了不少钱,好在孩子也恢复过来了,继续努力,挣钱养家 ...

  5. Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型

    Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型 原文:https://blog.csdn.net/u011808673/article/details/8079 ...

  6. edHat linux光盘引导,[原]个性化Linux发行版光盘之补充——XZ(LZMA算法)

    红帽(Red Hat)从Enterprise Server 6.2 开始,启动镜像文件initrd.img 开始改用xz 工具进行压缩,这与以往版本是有区别的. 一.启动镜像initrd.img 文件 ...

  7. 使用LZMA算法(转载)

     转自 逆时针 : 7-Zip 简介 7-Zip 是一款号称有着现今最高压缩比的压缩软件,它不仅支持独有的 7z 文件格式,而且还支持各种其它压缩文件格式,其中包括 ZIP, RAR, CAB, ...

  8. Python模块学习 - 用tinify模块压缩和优化图片

    Python模块学习 - 用tinify模块压缩和优化图片 tinify模块 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进 ...

  9. 《Python机器学习——预测分析核心算法》——2.4 基于因素变量的实数值预测:鲍鱼的年龄...

    本节书摘来异步社区<Python机器学习--预测分析核心算法>一书中的第2章,第2.4节,作者:[美]Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区"异步社 ...

最新文章

  1. jquery图片播放切换插件
  2. HTML5 geolocation和BaiduMap、BingMap、GoogleMap
  3. 补丁更新选项的禁用与恢复
  4. matlab title多个标题_MATLAB中的直方图处理及均衡化
  5. 前端学习(1841):前端面试题之redux管理状态机制
  6. 惊了!最通俗易懂的Djongo入门竟然在这里!
  7. 数据分析必备:掌握这个R语言基础包1%的功能,你就很牛了
  8. seata不兼容mysql8的解决方案
  9. 修改ASM磁盘组冗余模式(一):copy-switch方式
  10. win10更新1809版本后运行Dev-cpp, dos控制台字符乱码解决方法
  11. 休宁天气预报软件测试,【休宁天气预报】休宁今天天气预报 - 天气史
  12. java工程师可能需要的视频
  13. VC2012 ActiveX 控制台打印调试
  14. 计算机网络中ip子网的划分,计算机网络学习笔记(十二)IP 子网划分
  15. 自己动手编写一个VS插件(一)
  16. 什么情况下,英文单词中的k发音变g,t发音变d,p发音变b
  17. 惠州龙门大米飘香 国稻种芯-中国水稻节:广东乡村振兴样板
  18. 皇台酒业前三季净利亏1650万 拟深耕甘肃市场为中心辐射西北市场
  19. win10计算机启动慢,win10开机慢?如何使开机破8秒
  20. app读写照片和文件_App 偷看手机照片文件 25000 次,你要干什么?

热门文章

  1. 解决问题就像剥洋葱,解决的关键是基础知识
  2. net::ERR_INTERNET_DISCONNECTED
  3. FFmpeg flv视频如何转出mp3格式
  4. HDMI显示器为什么经常黑屏?有可能是HDMI线问题.
  5. SpringMVC总结笔记
  6. 错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))
  7. gorm中使用where in 条件
  8. 关闭eslint语法检查
  9. AD7606应用笔记
  10. 全面概述将人工智能市场纳入其广泛的数据库