Làm cách nào để lưu byte trong tệp văn bản trong python?

Mô-đun này cung cấp một giao diện đơn giản để nén và giải nén các tệp giống như các chương trình GNU gzip và gunzip.

Việc nén dữ liệu được cung cấp bởi mô-đun

Mô-đun cung cấp lớp, cũng như các chức năng tiện ích và tiện lợi. Lớp đọc và ghi các tệp định dạng gzip, tự động nén hoặc giải nén dữ liệu để nó trông giống như một tệp thông thường

Lưu ý rằng các định dạng tệp bổ sung có thể được giải nén bởi các chương trình gzip và gunzip, chẳng hạn như các định dạng được tạo bởi nén và đóng gói, không được mô-đun này hỗ trợ

Mô-đun xác định các mục sau

gzip. mở[tên tệp , chế độ='rb' , mức nén=9 , mã hóa=Không có , lỗi=Không có , dòng mới=Không có]

Mở tệp nén gzip ở chế độ nhị phân hoặc văn bản, trả về một

Đối số tên tệp có thể là tên tệp thực [a hoặc đối tượng] hoặc đối tượng tệp hiện có để đọc hoặc ghi vào

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

import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
4,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
5,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
6,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
7,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
8,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
9,
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
0 hoặc
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
1 đối với chế độ nhị phân hoặc
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
2,
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
3,
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
4 hoặc
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
5 đối với chế độ văn bản. Mặc định là
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
5

Đối số nénlevel là một số nguyên từ 0 đến 9, đối với hàm tạo

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

import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
9. Trong trường hợp này, không được cung cấp mã hóa, lỗi và đối số dòng mới

Đối với chế độ văn bản, một đối tượng được tạo và được bao bọc trong một phiên bản có mã hóa, hành vi xử lý lỗi và [các] kết thúc dòng được chỉ định

Đã thay đổi trong phiên bản 3. 3. Đã thêm hỗ trợ cho tên tệp là một đối tượng tệp, hỗ trợ cho chế độ văn bản và mã hóa, lỗi và đối số dòng mới.

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

import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
0,
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
1 và
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
5.

Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

ngoại lệ gzip. BadGzipFile

Một ngoại lệ được đưa ra cho các tệp gzip không hợp lệ. Nó kế thừa. và cũng có thể được nâng lên đối với các tệp gzip không hợp lệ

Mới trong phiên bản 3. 8

lớp gzip. GzipFile[tên tệp=Không , chế độ=Không có , mức nén=9 , fileobj=Không , mthời gian=Không có]

Trình xây dựng cho lớp, mô phỏng hầu hết các phương thức của a , ngoại trừ phương thức

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress[s_in]
9. Ít nhất một trong số fileobj và tên tệp phải được cung cấp một giá trị không tầm thường

Thể hiện của lớp mới dựa trên fileobj, có thể là tệp thông thường, đối tượng hoặc bất kỳ đối tượng nào khác mô phỏng tệp. Nó mặc định là gzip1, trong trường hợp đó tên tệp được mở để cung cấp một đối tượng tệp

Khi fileobj không phải là gzip1, đối số tên tệp chỉ được sử dụng để đưa vào tiêu đề tệp gzip, tiêu đề này có thể bao gồm tên tệp gốc của tệp không nén. Nó mặc định là tên tệp của fileobj, nếu có thể thấy rõ;

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

import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
4,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
5,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
6,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
7,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
8,
import gzip
content = b"Lots of content here"
with gzip.open['/home/joe/file.txt.gz', 'wb'] as f:
    f.write[content]
9,
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
0 hoặc
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
1, tùy thuộc vào việc tệp sẽ được đọc hay ghi. Mặc định là chế độ của fileobj nếu có thể thấy rõ; . Trong các bản phát hành Python trong tương lai, chế độ fileobj sẽ không được sử dụng. Tốt hơn là luôn chỉ định chế độ viết

Lưu ý rằng tệp luôn được mở ở chế độ nhị phân. Để mở tệp nén ở chế độ văn bản, hãy sử dụng [hoặc ngắt dòng của bạn bằng dấu ]

Đối số mức độ nén là một số nguyên từ zlib5 đến zlib6 kiểm soát mức độ nén; . zlib5 không nén. Mặc định là zlib6

Đối số mtime là dấu thời gian dạng số tùy chọn được ghi vào trường thời gian sửa đổi cuối cùng trong luồng khi nén. Nó chỉ nên được cung cấp ở chế độ nén. Nếu bỏ qua hoặc gzip1, thời gian hiện tại được sử dụng. Xem thuộc tính để biết thêm chi tiết

Việc gọi phương thức gzip4 của một đối tượng không đóng fileobj, vì bạn có thể muốn nối thêm tài liệu sau dữ liệu đã nén. Điều này cũng cho phép bạn chuyển một đối tượng được mở để ghi dưới dạng fileobj và truy xuất bộ nhớ đệm kết quả bằng phương thức của đối tượng

hỗ trợ giao diện, bao gồm phép lặp và câu lệnh. Chỉ phương pháp

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress[s_in]
9 không được triển khai

cũng cung cấp phương thức và thuộc tính sau

nhòm[n]

Đọc n byte không nén mà không tăng vị trí tệp. Nhiều nhất một lần đọc trên luồng nén được thực hiện để đáp ứng cuộc gọi. Số byte được trả về có thể nhiều hơn hoặc ít hơn yêu cầu

Ghi chú

Trong khi gọi không thay đổi vị trí tệp của , nó có thể thay đổi vị trí của đối tượng tệp bên dưới [e. g. nếu được xây dựng với fileobj tham số]

Mới trong phiên bản 3. 2

thời gian

Khi giải nén, giá trị của trường thời gian sửa đổi cuối cùng trong tiêu đề được đọc gần đây nhất có thể được đọc từ thuộc tính này, dưới dạng số nguyên. Giá trị ban đầu trước khi đọc bất kỳ tiêu đề nào là gzip1

Tất cả các luồng nén gzip đều phải chứa trường dấu thời gian này. Một số chương trình, chẳng hạn như gunzip, sử dụng dấu thời gian. Định dạng giống như giá trị trả về và thuộc tính của đối tượng được trả về bởi

Đã thay đổi trong phiên bản 3. 1. Hỗ trợ cho câu lệnh đã được thêm vào, cùng với đối số và thuộc tính hàm tạo mtime.

Đã thay đổi trong phiên bản 3. 2. Đã thêm hỗ trợ cho các tệp không đệm và không thể tìm thấy.

Đã thay đổi trong phiên bản 3. 3. Phương thức hiện đã được triển khai.

Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ cho chế độ

import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
0 và
import gzip
import shutil
with open['/home/joe/file.txt', 'rb'] as f_in:
    with gzip.open['/home/joe/file.txt.gz', 'wb'] as f_out:
        shutil.copyfileobj[f_in, f_out]
1.

Đã thay đổi trong phiên bản 3. 5. Đã thêm hỗ trợ viết tùy ý. Phương pháp hiện chấp nhận một đối số của gzip1.

Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

Không dùng nữa kể từ phiên bản 3. 9. Việc mở để viết mà không chỉ định đối số chế độ không được chấp nhận.

gzip. nén[dữ liệu , mức nén=9 , * , mthời gian=Không có]

Nén dữ liệu, trả về một đối tượng chứa dữ liệu đã nén. nénlevel và mtime có cùng ý nghĩa như trong hàm tạo ở trên. Khi mtime được đặt thành zlib5, chức năng này tương đương với wbit được đặt thành compress[]2. Chức năng zlib nhanh hơn

Mới trong phiên bản 3. 2

Đã thay đổi trong phiên bản 3. 8. Đã thêm tham số mtime cho đầu ra có thể lặp lại.

Đã thay đổi trong phiên bản 3. 11. Tốc độ được cải thiện bằng cách nén tất cả dữ liệu cùng một lúc thay vì theo kiểu truyền phát. Các cuộc gọi với mtime được đặt thành zlib5 được ủy quyền để có tốc độ tốt hơn.

gzip. giải nén[dữ liệu]

Giải nén dữ liệu, trả về một đối tượng chứa dữ liệu không nén. Chức năng này có khả năng giải nén dữ liệu gzip nhiều thành viên [nhiều khối gzip nối với nhau]. Khi dữ liệu chắc chắn chỉ chứa một thành viên, hàm có wbits được đặt thành 31 sẽ nhanh hơn

Chủ Đề