Hướng dẫn lzma python - con trăn lzma

Mới trong phiên bản 3.3.

Mã nguồn: lib/lzma.py Lib/lzma.py


Mô -đun này cung cấp các lớp và chức năng tiện lợi để nén và giải nén dữ liệu bằng thuật toán nén LZMA. Cũng bao gồm một giao diện tệp hỗ trợ các định dạng tệp .xz và Legacy .lzma được sử dụng bởi tiện ích XZ, cũng như các luồng nén thô.xz utility, as well as raw compressed streams.

Giao diện được cung cấp bởi mô -đun này rất giống với mô -đun bz2. Lưu ý rằng LZMAFile

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
0 không an toàn cho luồng, vì vậy nếu bạn cần sử dụng một phiên bản ____99 từ nhiều luồng, thì cần phải bảo vệ nó bằng khóa.

Ngoại lệ ________ 12 ________ 13¶

Ngoại lệ này được nêu ra khi xảy ra lỗi trong quá trình nén hoặc giải nén hoặc trong khi khởi tạo trạng thái máy nén/bộ giải nén.

Đọc và viết các tệp nén

________ 12 ________ 15 (tên tệp, mode = 'rb', *, format = none, kiểm tra =- 1, preset = none, brilter = none(filename, mode='rb', *, format=None, check=- 1, preset=None, filters=None, encoding=None, errors=None, newline=None)

Mở một tệp được nén LZMA ở chế độ nhị phân hoặc văn bản, trả về một đối tượng tệp.file object.

Đối số tên tệp có thể là tên tệp thực tế (được đưa ra dưới dạng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
6,
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 hoặc đối tượng giống như đường dẫn), trong trường hợp đó, tệp được đặt tên được mở hoặc nó có thể là một đối tượng tệp hiện có để đọc hoặc ghi vào.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.

Đối số chế độ có thể là bất kỳ

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
8,
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
9,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
0,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
1,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
4 hoặc
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
5 cho chế độ nhị phân hoặc
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
6,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
7,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
8 hoặc
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
9 cho chế độ văn bản. Mặc định là
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
9.

Khi mở một tệp để đọc, các đối số định dạng và bộ lọc có ý nghĩa tương tự như đối với

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])
1. Trong trường hợp này, không nên sử dụng đối số kiểm tra và đặt trước.

Khi mở một tệp để viết, định dạng, kiểm tra, đặt trước và các đối số bộ lọc có ý nghĩa tương tự như đối với

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])
2.

Đối với chế độ nhị phân, hàm này tương đương với hàm tạo LZMAFile:

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])
4. Trong trường hợp này, không được cung cấp mã hóa, lỗi và các đối số mới.

Đối với chế độ văn bản, một đối tượng LZMAFile được tạo và được bọc trong một thể hiện

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])
6 với mã hóa được chỉ định, hành vi xử lý lỗi và (các) kết thúc dòng.

Đã thay đổi trong phiên bản 3.4: Đã thêm hỗ trợ cho các chế độ

import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3 và
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
8.Added support for the
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3 and
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
8 modes.

Lớp ________ 12 ________ 41 (fileName = none, mode = 'r', *, format = none, séc =- 1, preset = none, interter = none)(filename=None, mode='r', *, format=None, check=- 1, preset=None, filters=None)

Mở một tập tin được nén LZMA ở chế độ nhị phân.

Một LZMAFile có thể bọc một đối tượng tệp đã mở hoặc hoạt động trực tiếp trên một tệp được đặt tên. Đối số tên tệp chỉ định đối tượng tệp để bọc hoặc tên của tệp để mở (như một đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
6,
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 hoặc giống như đường dẫn). Khi gói một đối tượng tệp hiện có, tệp được bọc sẽ không được đóng khi đóng LZMAFile.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
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
6,
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 or path-like object). When wrapping an existing file object, the wrapped file will not be closed when the LZMAFile is closed.

Đối số chế độ có thể là

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
8 để đọc (mặc định),
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
0 để ghi đè,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2 để tạo độc quyền hoặc
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
4 để nối thêm. Chúng có thể tương đương được đưa ra là
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
9,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
1,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3 và
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
5 tương ứng.

Nếu tên tệp là một đối tượng tệp (chứ không phải là tên tệp thực tế), chế độ

import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
0 không cắt giảm tệp và thay vào đó tương đương với
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
4.

Khi mở một tệp để đọc, tệp đầu vào có thể là sự kết hợp của nhiều luồng nén riêng biệt. Chúng được giải mã trong suốt như một luồng logic duy nhất.

Khi mở một tệp để đọc, các đối số định dạng và bộ lọc có ý nghĩa tương tự như đối với

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])
1. Trong trường hợp này, không nên sử dụng đối số kiểm tra và đặt trước.

Khi mở một tệp để viết, định dạng, kiểm tra, đặt trước và các đối số bộ lọc có ý nghĩa tương tự như đối với

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])
2.

Đối với chế độ nhị phân, hàm này tương đương với hàm tạo LZMAFile:

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])
4. Trong trường hợp này, không được cung cấp mã hóa, lỗi và các đối số mới.

Đối với chế độ văn bản, một đối tượng LZMAFile được tạo và được bọc trong một thể hiện

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])
6 với mã hóa được chỉ định, hành vi xử lý lỗi và (các) kết thúc dòng.

Đã thay đổi trong phiên bản 3.4: Đã thêm hỗ trợ cho các chế độ
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3 và
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
8.(size=- 1)

Lớp ________ 12 ________ 41 (fileName = none, mode = 'r', *, format = none, séc =- 1, preset = none, interter = none)

Mở một tập tin được nén LZMA ở chế độ nhị phân.

Một LZMAFile có thể bọc một đối tượng tệp đã mở hoặc hoạt động trực tiếp trên một tệp được đặt tên. Đối số tên tệp chỉ định đối tượng tệp để bọc hoặc tên của tệp để mở (như một đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
6,
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 hoặc giống như đường dẫn). Khi gói một đối tượng tệp hiện có, tệp được bọc sẽ không được đóng khi đóng LZMAFile.

Đối số chế độ có thể là

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
8 để đọc (mặc định),
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
0 để ghi đè,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2 để tạo độc quyền hoặc
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
4 để nối thêm. Chúng có thể tương đương được đưa ra là
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
9,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
1,
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3 và
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
5 tương ứng.Added support for the
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
2 and
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
3 modes.

Nếu tên tệp là một đối tượng tệp (chứ không phải là tên tệp thực tế), chế độ

import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
0 không cắt giảm tệp và thay vào đó tương đương với
import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)
4.The .xz9 method now accepts an argument of .lzma0.

Khi mở một tệp để đọc, tệp đầu vào có thể là sự kết hợp của nhiều luồng nén riêng biệt. Chúng được giải mã trong suốt như một luồng logic duy nhất.

LZMAFile hỗ trợ tất cả các thành viên được chỉ định bởi
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")
9, ngoại trừ .xz0 và .xz1. Lặp lại và câu lệnh .xz2 được hỗ trợ.(format=FORMAT_XZ, check=- 1, preset=None, filters=None)

Phương pháp sau cũng được cung cấp:

Để biết cách nén thuận tiện hơn để nén một khối dữ liệu, xem .lzma3.

Đối số định dạng chỉ định định dạng container nên được sử dụng. Các giá trị có thể là:

  • .lzma4: Định dạng container .xz.

    Đây là định dạng mặc định.

  • .lzma6: Định dạng container di sản .lzma.

    Định dạng này bị hạn chế hơn .xz - nó không hỗ trợ kiểm tra tính toàn vẹn hoặc nhiều bộ lọc.

  • .lzma9: Một luồng dữ liệu thô, không sử dụng bất kỳ định dạng container nào.

    Bộ xác định định dạng này không hỗ trợ kiểm tra tính toàn vẹn và yêu cầu bạn luôn chỉ định chuỗi bộ lọc tùy chỉnh (cho cả nén và giải nén). Ngoài ra, dữ liệu được nén theo cách này không thể được giải nén bằng cách sử dụng bz20 (xem

    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])
    
    1).

Đối số kiểm tra chỉ định loại kiểm tra tính toàn vẹn để bao gồm trong dữ liệu nén. Kiểm tra này được sử dụng khi giải nén, để đảm bảo rằng dữ liệu chưa bị hỏng. Các giá trị có thể là:

  • bz22: Không kiểm tra tính toàn vẹn. Đây là mặc định (và giá trị duy nhất có thể chấp nhận được) cho .lzma6 và .lzma9.

  • bz25: Kiểm tra dự phòng tuần hoàn 32 bit.

  • bz26: Kiểm tra dự phòng theo chu kỳ 64 bit. Đây là mặc định cho .lzma4.

  • bz28: Thuật toán băm an toàn 256 bit.

Nếu kiểm tra được chỉ định không được hỗ trợ, bz29 sẽ được nâng lên.

Cài đặt nén có thể được chỉ định dưới dạng mức nén đặt trước (với đối số đặt trước) hoặc chi tiết như một chuỗi bộ lọc tùy chỉnh (với đối số bộ lọc).

Đối số đặt trước (nếu được cung cấp) phải là một số nguyên giữa LZMAFile0 và LZMAFile1 (bao gồm), tùy chọn OR-ed với hằng số LZMAFile2. Nếu không đặt trước và bộ lọc nào được đưa ra, hành vi mặc định là sử dụng LZMAFile3 (Cấp độ trước LZMAFile4). Các cài đặt trước cao hơn tạo ra sản lượng nhỏ hơn, nhưng làm cho quá trình nén chậm hơn.

Ghi chú

Ngoài việc sử dụng nhiều CPU hơn, nén với các cài đặt trước cao hơn cũng đòi hỏi nhiều bộ nhớ hơn (và tạo ra đầu ra cần nhiều bộ nhớ hơn để giải nén). Ví dụ, với LZMAFile1 được đặt trước, chi phí cho một đối tượng

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])
2 có thể cao tới 800 mib. Vì lý do này, nói chung là tốt nhất để gắn bó với cài đặt trước mặc định.

Đối số bộ lọc (nếu được cung cấp) phải là một trình xác định chuỗi bộ lọc. Xem chỉ định chuỗi bộ lọc tùy chỉnh để biết chi tiết.Specifying custom filter chains for details.

________ 97 (dữ liệu) ¶(data)

Nén dữ liệu (đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7), trả về một đối tượng
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 chứa dữ liệu nén cho ít nhất một phần của đầu vào. Một số dữ liệu có thể được đệm trong nội bộ, để sử dụng trong các cuộc gọi sau này đến .lzma3 và
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
01. Dữ liệu được trả về phải được nối với đầu ra của bất kỳ cuộc gọi nào trước đó đến .lzma3.

________ 103 ()()

Kết thúc quá trình nén, trả về một đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 chứa bất kỳ dữ liệu nào được lưu trữ trong bộ đệm bên trong máy nén.

Máy nén không thể được sử dụng sau khi phương pháp này đã được gọi.

Lớp ________ 12 ________ 106 (format = format_auto, memlimit = none, brilter = none) ¶(format=FORMAT_AUTO, memlimit=None, filters=None)

Tạo một đối tượng giải nén, có thể được sử dụng để giải nén dữ liệu tăng dần.

Để biết một cách thuận tiện hơn để giải nén toàn bộ luồng nén cùng một lúc, xem

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
07.

Đối số định dạng chỉ định định dạng container nên được sử dụng. Mặc định là bz20, có thể giải nén cả tệp .xz.lzma. Các giá trị có thể khác là .lzma4, .lzma6 và .lzma9.

Đối số memlimit chỉ định một giới hạn (tính bằng byte) về lượng bộ nhớ mà bộ giải nén có thể sử dụng. Khi đối số này được sử dụng, giải nén sẽ thất bại với bz29 nếu không thể giải nén đầu vào trong giới hạn bộ nhớ đã cho.

Đối số bộ lọc chỉ định chuỗi bộ lọc được sử dụng để tạo luồng được giải nén. Đối số này là bắt buộc nếu định dạng là .lzma9, nhưng không nên được sử dụng cho các định dạng khác. Xem chỉ định chuỗi bộ lọc tùy chỉnh để biết thêm thông tin về chuỗi bộ lọc.Specifying custom filter chains for more information about filter chains.

Ghi chú

Ngoài việc sử dụng nhiều CPU hơn, nén với các cài đặt trước cao hơn cũng đòi hỏi nhiều bộ nhớ hơn (và tạo ra đầu ra cần nhiều bộ nhớ hơn để giải nén). Ví dụ, với LZMAFile1 được đặt trước, chi phí cho một đối tượng

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])
2 có thể cao tới 800 mib. Vì lý do này, nói chung là tốt nhất để gắn bó với cài đặt trước mặc định.

Đối số bộ lọc (nếu được cung cấp) phải là một trình xác định chuỗi bộ lọc. Xem chỉ định chuỗi bộ lọc tùy chỉnh để biết chi tiết.(data, max_length=- 1)

________ 97 (dữ liệu) ¶bytes-like object), returning uncompressed data as bytes. Some of data may be buffered internally, for use in later calls to

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
07. The returned data should be concatenated with the output of any previous calls to
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
07.

Nén dữ liệu (đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7), trả về một đối tượng
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7 chứa dữ liệu nén cho ít nhất một phần của đầu vào. Một số dữ liệu có thể được đệm trong nội bộ, để sử dụng trong các cuộc gọi sau này đến .lzma3 và
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
01. Dữ liệu được trả về phải được nối với đầu ra của bất kỳ cuộc gọi nào trước đó đến .lzma3.

Nếu tất cả các dữ liệu đầu vào đã được giải nén và trả về (vì điều này nhỏ hơn max_length byte hoặc vì MAX_LEPT là âm), thuộc tính

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
22 sẽ được đặt thành
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
27.

Cố gắng giải nén dữ liệu sau khi kết thúc của luồng đã làm tăng Eoferror. Bất kỳ dữ liệu nào được tìm thấy sau khi kết thúc luồng bị bỏ qua và lưu trong thuộc tính

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
28.

Đã thay đổi trong phiên bản 3.5: Đã thêm tham số MAX_LEPT.Added the max_length parameter.

________ 129¶

ID của kiểm tra tính toàn vẹn được sử dụng bởi luồng đầu vào. Điều này có thể là

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
30 cho đến khi đủ đầu vào đã được giải mã để xác định kiểm tra tính toàn vẹn mà nó sử dụng.

________ 131¶

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
27 Nếu đạt được điểm đánh dấu cuối dòng.

________ 133¶

Dữ liệu được tìm thấy sau khi kết thúc luồng nén.

Trước khi kết thúc luồng, điều này sẽ là

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
34.

________ 135¶

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
23 Nếu phương pháp
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
07 có thể cung cấp nhiều dữ liệu được giải nén hơn trước khi yêu cầu đầu vào mới không nén.

Mới trong phiên bản 3.5.

A(data, format=FORMAT_XZ, check=- 1, preset=None, filters=None)

Nén dữ liệu (đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7), trả về dữ liệu được nén dưới dạng đối tượng
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7.

Xem

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])
2 ở trên để biết mô tả về định dạng, kiểm tra, đặt trước và các đối số lọc.

________ 12 ________ 119 (data, format = format_auto, memlimit = không(data, format=FORMAT_AUTO, memlimit=None, filters=None)

Dữ liệu giải nén (đối tượng

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7), trả về dữ liệu không nén dưới dạng đối tượng
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
7.

Nếu dữ liệu là sự kết hợp của nhiều luồng nén riêng biệt, giải nén tất cả các luồng này và trả về sự kết hợp của kết quả.

Xem

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])
1 ở trên để biết mô tả về định dạng, memlimit và các đối số lọc.

Điều khoản khác¶

________ 12 ________ 149 (kiểm tra) ¶(check)

Trả về

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
27 Nếu kiểm tra tính toàn vẹn nhất định được hỗ trợ trên hệ thống này.

bz22 và bz25 luôn được hỗ trợ. bz26 và bz28 có thể không khả dụng nếu bạn đang sử dụng phiên bản Liblzma được biên dịch với bộ tính năng giới hạn.liblzma that was compiled with a limited feature set.

Chỉ định chuỗi bộ lọc tùy chỉnh

Trình xác định chuỗi bộ lọc là một chuỗi từ điển, trong đó mỗi từ điển chứa ID và tùy chọn cho một bộ lọc. Mỗi từ điển phải chứa khóa

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
55 và có thể chứa các khóa bổ sung để chỉ định các tùy chọn phụ thuộc vào bộ lọc. ID bộ lọc hợp lệ như sau:

  • Bộ lọc nén:
    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      56 (để sử dụng với .lzma6)

    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      58 (để sử dụng với .lzma4 và .lzma9)

  • Bộ lọc Delta:
    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      61

  • Bộ lọc CALL-CALL-JUMP (BCJ):
    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      62

    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      63

    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      64

    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      65

    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      66

    • import lzma
      data = b"Insert Data Here"
      with lzma.open("file.xz", "w") as f:
          f.write(data)
      
      67

Một chuỗi bộ lọc có thể bao gồm tối đa 4 bộ lọc và không thể trống. Bộ lọc cuối cùng trong chuỗi phải là bộ lọc nén và bất kỳ bộ lọc nào khác phải là bộ lọc Delta hoặc BCJ.

Bộ lọc nén hỗ trợ các tùy chọn sau (được chỉ định là các mục bổ sung trong từ điển đại diện cho bộ lọc):

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    68: Một cài đặt trước nén để sử dụng làm nguồn giá trị mặc định cho các tùy chọn không được chỉ định rõ ràng.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    69: Kích thước từ điển tính bằng byte. Điều này nên nằm trong khoảng từ 4 kib đến 1,5 Gib (bao gồm).

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    70: Số lượng bit ngữ cảnh theo nghĩa đen.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    71: Số lượng bit vị trí theo nghĩa đen. Tổng
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    72 phải nhiều nhất là 4.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    73: số bit vị trí; phải tối đa 4.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    74:
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    75 hoặc
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    76.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    77: Những gì nên được coi là một chiều dài tốt đẹp cho một trận đấu. Đây phải là 273 hoặc ít hơn.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    78: Công cụ tìm kiếm đối sánh nào để sử dụng -
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    79,
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    80,
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    81,
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    82 hoặc
    import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    83.

  • import lzma
    data = b"Insert Data Here"
    with lzma.open("file.xz", "w") as f:
        f.write(data)
    
    84: Độ sâu tìm kiếm tối đa được sử dụng bởi Match Finder. 0 (mặc định) có nghĩa là chọn tự động dựa trên các tùy chọn bộ lọc khác.

Bộ lọc Delta lưu trữ sự khác biệt giữa các byte, tạo ra đầu vào lặp đi lặp lại nhiều hơn cho máy nén trong một số trường hợp nhất định. Nó hỗ trợ một tùy chọn,

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
85. Điều này cho thấy khoảng cách giữa các byte bị trừ. Mặc định là 1, tức là lấy sự khác biệt giữa các byte liền kề.

Các bộ lọc BCJ được dự định sẽ được áp dụng cho mã máy. Họ chuyển đổi các nhánh tương đối, cuộc gọi và nhảy trong mã để sử dụng địa chỉ tuyệt đối, với mục đích tăng sự dư thừa có thể được khai thác bởi máy nén. Các bộ lọc này hỗ trợ một tùy chọn,

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)
86. Điều này chỉ định địa chỉ nên được ánh xạ tới đầu dữ liệu đầu vào. Mặc định là 0.

Ví dụ;

Đọc trong một tệp nén:

import lzma
with lzma.open("file.xz") as f:
    file_content = f.read()

Tạo một tệp nén:

import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)

Nén dữ liệu trong bộ nhớ:

import lzma
data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)

Nén gia tăng:

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])

Viết dữ liệu nén vào một tệp đã mở:

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")

Tạo tệp nén bằng chuỗi bộ lọc tùy chỉnh:

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")