Computer >> Máy Tính >  >> Lập trình >> Python

Hỗ trợ Python cho tệp gzip (gzip)

Ứng dụng GZip được sử dụng để nén và giải nén các tệp. Nó là một phần của dự án GNU. Mô-đun gzip của Python là giao diện của ứng dụng GZip. Bản thân thuật toán nén dữ liệu gzip dựa trên mô-đun zlib.

Mô-đun gzip chứa định nghĩa của lớp GzipFile cùng với các phương thức của nó. Nó cũng có chức năng tiện lợi open (), nén () và giải nén ().

Cách dễ nhất để nén và giải nén là sử dụng các chức năng đã đề cập ở trên.

open ()

Hàm này mở một tệp nén gzip ở chế độ nhị phân hoặc văn bản và trả về một tệp giống như đối tượng, có thể là tệp vật lý, một đối tượng chuỗi hoặc byte. Theo mặc định, tệp được mở ở chế độ ‘rb’ tức là đọc dữ liệu nhị phân, tuy nhiên, tham số chế độ cho hàm này có thể sử dụng các chế độ khác như được liệt kê bên dưới.

binary mode: 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', 'xb'
text mode : 'rt', 'at', 'wt', or 'xt'

Hàm này cũng xác định mức nén có giá trị chấp nhận được nằm trong khoảng từ 0 đến 9. Khi tệp được mở ở chế độ văn bản, đối tượng GzipFile được bao bọc trong đối tượng TextIOWrapper.

nén ()

Hàm này áp dụng tính năng nén trên dữ liệu được cung cấp cho nó dưới dạng đối số và trả về đối tượng byte được nén. Theo mặc định mức nén là 9.

giải nén ()

Hàm này giải nén đối tượng byte và trả về dữ liệu chưa được nén.

Ví dụ sau tạo tệp gzip bằng cách ghi dữ liệu nén vào đó.

>>> import gzip
>>> data = b'Python - Batteries included'
>>> with gzip.open("test.txt.gz", "wb") as f:
f.write(data)

Thao tác này sẽ tạo tệp “test.txt.gz” trong thư mục hiện tại. Kho lưu trữ gzip này chứa “test.txt” mà bạn có thể xác minh bằng bất kỳ tiện ích giải nén nào.

Để đọc theo chương trình tệp nén này

>>> with gzip.open("test.txt.gz", "rb") as f:
data = f.read()
>>> data
b'Python - Batteries included'

Để nén một tệp hiện có vào một kho lưu trữ gzip, hãy đọc văn bản trong đó và chuyển đổi nó thành một bytearray. Đối tượng bytearray này sau đó được ghi vào tệp gzip. Trong ví dụ bên dưới, tệp ‘zen.txt’ được giả định là có trong thư mục hiện tại.

fp = open("zen.txt","rb")
>>> data = fp.read()
>>> bindata = bytearray(data)
>>> with gzip.open("zen.txt.gz", "wb") as f:
f.write(bindata)

Để truy xuất tệp giải nén từ kho lưu trữ gzip

>>> fp = open("zen1.txt", "wb")
>>> with gzip.open("zen.txt.gz", "rb") as f:
bindata = f.read()
>>> fp.write(bindata)
>>> fp.close()

Đoạn mã trên sẽ tạo ‘zen1.txt’ trong thư mục hiện tại chứa dữ liệu tương tự như trong ‘zen.txt’

Ngoài các chức năng tiện lợi này, mô-đun gzip còn có lớp GzipFile định nghĩa các phương thức nén () và giải nén (). Hàm tạo của lớp này nhận các đối số tệp, chế độ và cấp nén chính xác với ý nghĩa tương tự như trên.

Khi tham số chế độ được cung cấp là ‘w’ hoặc ‘wb’ hoặc ‘wt’, đối tượng GipFile sẽ cung cấp phương thức write () để nén dữ liệu đã cho và ghi vào tệp gzip.

>>> f = gzip.GzipFile("testnew.txt.gz","wb")
>>> data = b'Python - Batteries included'
>>> f.write(data)
>>> f.close()

Thao tác này sẽ tạo tệp testnew.txt.gz. Bạn có thể giải nén nó bằng bất kỳ tiện ích nào để thấy rằng nó có chứa testnew.txt với dòng chữ "Python - Đã bao gồm pin" trong đó.

Để giải nén tệp gzip bằng đối tượng GzipFile, hãy tạo nó với giá trị ‘rb’ cho tham số chế độ và đọc dữ liệu chưa nén bằng phương thức read ()

>>> f = gzip.GzipFile("testnew.txt.gz","rb")
>>> data = f.read()
>>> data
b'Python - Batteries included'

Trong bài viết này, chúng tôi đã tìm hiểu cách triển khai thư viện gzip bằng mô-đun gzip của Python.