Hướng dẫn lzma python - con trăn lzma
Mới trong phiên bản 3.3. Show 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 Giao diện được cung cấp bởi mô -đun này rất giống với mô -đun 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 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 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 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 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 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 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 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_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ế độ 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ừ .xz 0 và .xz 1. Lặp lại và câu lệnh .xz 2 đượ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 Đối số định dạng chỉ định định dạng container nên được sử dụng. Các giá trị có thể là:
Đố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à:
Nếu kiểm tra được chỉ định không được hỗ trợ, 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 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 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 .lzma 3 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 .lzma 3. ________ 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à Đố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 Đố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à 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 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 .lzma 3 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 .lzma 3.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.
Chỉ định chuỗi bộ lọc tùy chỉnhTrì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:
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):
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") |