Làm cách nào để nén một tệp trong python?

Định dạng tệp ZIP là một tiêu chuẩn lưu trữ và nén phổ biến. Mô-đun này cung cấp các công cụ để tạo, đọc, viết, nối thêm và liệt kê tệp ZIP. Bất kỳ việc sử dụng nâng cao nào của mô-đun này sẽ yêu cầu hiểu biết về định dạng, như được định nghĩa trong Ghi chú Ứng dụng PKZIP

Mô-đun này hiện không xử lý các tệp ZIP nhiều đĩa. Nó có thể xử lý các tệp ZIP sử dụng phần mở rộng ZIP64 [tức là các tệp ZIP có kích thước lớn hơn 4 GiB]. Nó hỗ trợ giải mã các tệp được mã hóa trong kho lưu trữ ZIP, nhưng hiện tại nó không thể tạo tệp được mã hóa. Quá trình giải mã cực kỳ chậm vì nó được triển khai bằng Python gốc chứ không phải C

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

ngoại lệ tệp zip. BadZipFile

Đã xảy ra lỗi đối với các tệp ZIP xấu

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

ngoại lệ tệp zip. BadZipfile

Bí danh của

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
0, để tương thích với các phiên bản Python cũ hơn

Không dùng nữa kể từ phiên bản 3. 2

ngoại lệ tệp zip. Tệp Zip lớn

Lỗi phát sinh khi tệp ZIP yêu cầu chức năng ZIP64 nhưng chức năng đó chưa được bật

lớp tệp zip. Tệp Zip

Lớp đọc và ghi tệp ZIP. Xem phần Đối tượng ZipFile để biết chi tiết về hàm tạo.

lớp tệp zip. Con đường

Trình bao bọc tương thích với pathlib dành cho tệp zip. Xem phần Đối tượng đường dẫn để biết chi tiết.

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

lớp tệp zip. PyZipTệp

Lớp tạo kho lưu trữ ZIP chứa thư viện Python

lớp tệp zip. ZipInfo[tên tệp='NoName' , date_time=[1980, 1, 1, 0, 0, 0]]

Lớp được sử dụng để biểu thị thông tin về thành viên của kho lưu trữ. Các thể hiện của lớp này được trả về bởi các phương thức

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
1 và
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
2 của đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3. Hầu hết người dùng mô-đun
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
40 sẽ không cần tạo những thứ này mà chỉ sử dụng những thứ được tạo bởi mô-đun này. tên tệp phải là tên đầy đủ của thành viên lưu trữ và date_time phải là một bộ chứa sáu trường mô tả thời gian sửa đổi lần cuối đối với tệp; .
ZipInfo Objects.

tệp zip. is_zipfile[tên tệp]

Trả về

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
5 nếu tên tệp là tệp ZIP hợp lệ dựa trên số ma thuật của nó, nếu không thì trả về
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
6. tên tệp cũng có thể là tệp hoặc đối tượng giống như tệp

Đã thay đổi trong phiên bản 3. 1. Hỗ trợ tệp và các đối tượng giống như tệp.

tệp zip. ZIP_STORED

Hằng số cho một thành viên lưu trữ không nén

tệp zip. ZIP_DEFLATED

Hằng số cho phương pháp nén ZIP thông thường. Điều này yêu cầu mô-đun

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
7

tệp zip. ZIP_BZIP2

Hằng số cho phương pháp nén BZIP2. Điều này yêu cầu mô-đun

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
8

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

tệp zip. ZIP_LZMA

Hằng số cho phương pháp nén LZMA. Điều này yêu cầu mô-đun

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
9

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

Ghi chú

Đặc tả định dạng tệp ZIP đã bao gồm hỗ trợ nén bzip2 từ năm 2001 và nén LZMA từ năm 2006. Tuy nhiên, một số công cụ [bao gồm cả các bản phát hành Python cũ hơn] không hỗ trợ các phương thức nén này và có thể từ chối xử lý toàn bộ tệp ZIP hoặc không giải nén được các tệp riêng lẻ

Xem thêm

Ứng dụng PKZIP Lưu ý

Tài liệu về định dạng tệp ZIP của Phil Katz, người tạo định dạng và thuật toán được sử dụng

Trang chủ Thông tin-ZIP

Thông tin về các chương trình lưu trữ ZIP và thư viện phát triển của dự án Info-ZIP

Đối tượng ZipFile¶

lớp tệp zip. Tệp Zip[tệp , chế độ='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True, metadata_encoding=None]

Mở tệp ZIP, trong đó tệp có thể là đường dẫn đến tệp [chuỗi], đối tượng giống tệp hoặc đối tượng giống đường dẫn.

Tham số chế độ phải là

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0 để đọc tệp hiện có,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1 để cắt bớt và ghi tệp mới,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2 để nối thêm vào tệp hiện có hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 để tạo và ghi tệp mới. Nếu chế độ là
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 và tệp đề cập đến một tệp hiện có, thì
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
5 sẽ được nâng lên. Nếu chế độ là
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2 và tệp đề cập đến một tệp ZIP hiện có, thì các tệp bổ sung sẽ được thêm vào tệp đó. Nếu tệp không tham chiếu đến tệp ZIP thì tệp lưu trữ ZIP mới sẽ được thêm vào tệp. Điều này có nghĩa là để thêm tệp lưu trữ ZIP vào tệp khác [chẳng hạn như
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
7]. Nếu chế độ là
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2 và tệp hoàn toàn không tồn tại, nó sẽ được tạo. Nếu chế độ là
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2, tệp có thể tìm kiếm được

nén là phương pháp nén ZIP được sử dụng khi ghi tệp lưu trữ và phải là

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
04; . Nếu
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
04 được chỉ định nhưng mô-đun tương ứng [
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
7,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
8 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
9] không có sẵn, thì
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 được nâng lên. Mặc định là
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01

Nếu allowZip64 là tệp zip

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
5 [mặc định] sẽ tạo tệp ZIP sử dụng phần mở rộng ZIP64 khi tệp zip lớn hơn 4 GiB. Nếu là
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
15 thì
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
40 sẽ đưa ra một ngoại lệ khi tệp ZIP yêu cầu phần mở rộng ZIP64

Tham số nénlevel kiểm soát mức nén sẽ sử dụng khi ghi tệp vào kho lưu trữ. Khi sử dụng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
04, nó không có hiệu lực. Khi sử dụng số nguyên
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
80 đến
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
81 được chấp nhận [xem
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
7 để biết thêm thông tin]. Khi sử dụng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03 số nguyên
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
84 đến
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
81 được chấp nhận [xem
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
8 để biết thêm thông tin]

Đối sốstrict_timestamps, khi được đặt thành

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
6, cho phép nén các tệp cũ hơn 1980-01-01 với chi phí đặt dấu thời gian thành 1980-01-01. Hành vi tương tự xảy ra với các tệp mới hơn 2107-12-31, dấu thời gian cũng được đặt thành giới hạn

Khi chế độ là

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0, metadata_encoding có thể được đặt thành tên của codec, sẽ được sử dụng để giải mã siêu dữ liệu như tên của các thành viên và nhận xét ZIP

Nếu tệp được tạo với chế độ

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2 và sau đó là
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02 mà không thêm bất kỳ tệp nào vào kho lưu trữ, cấu trúc ZIP thích hợp cho kho lưu trữ trống sẽ được ghi vào tệp

ZipFile cũng là một trình quản lý bối cảnh và do đó hỗ trợ câu lệnh

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03. Trong ví dụ này, myzip bị đóng sau khi bộ câu lệnh
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03 kết thúc—ngay cả khi có ngoại lệ xảy ra

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3

Ghi chú

metadata_encoding là cài đặt toàn phiên bản cho ZipFile. Hiện tại không thể thiết lập điều này trên cơ sở mỗi thành viên

Thuộc tính này là một giải pháp thay thế cho các triển khai kế thừa tạo ra các tệp lưu trữ có tên trong trang mã hoặc mã hóa ngôn ngữ hiện tại [hầu hết trên Windows]. Theo. ZIP, mã hóa siêu dữ liệu có thể được chỉ định là trang mã IBM [mặc định] hoặc UTF-8 bằng cờ trong tiêu đề kho lưu trữ. Cờ đó được ưu tiên hơn metadata_encoding, đây là tiện ích mở rộng dành riêng cho Python

Mới trong phiên bản 3. 2. Đã thêm khả năng sử dụng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3 làm trình quản lý ngữ cảnh.

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

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
06 và
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
9.

Đã thay đổi trong phiên bản 3. 4. Tiện ích ZIP64 được bật theo mặc định.

Đã thay đổi trong phiên bản 3. 5. Đã thêm hỗ trợ ghi vào các luồng không thể truy cập. Đã thêm hỗ trợ cho chế độ

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3.

Đã thay đổi trong phiên bản 3. 6. Trước đây, một

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đơn giản đã được nâng lên cho các giá trị nén không được nhận dạng.

Đã thay đổi trong phiên bản 3. 6. 2. Tham số tệp chấp nhận một đối tượng giống như đường dẫn .

Đã thay đổi trong phiên bản 3. 7. Thêm thông số mức độ nén.

Mới trong phiên bản 3. 8. Đối số chỉ dành cho từ khóastrict_timestamp

Đã thay đổi trong phiên bản 3. 11. Đã thêm hỗ trợ chỉ định mã hóa tên thành viên để đọc siêu dữ liệu trong thư mục của tệp zip và tiêu đề tệp.

Tệp Zip. đóng[]

Đóng tệp lưu trữ. Bạn phải gọi cho

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
90 trước khi thoát khỏi chương trình của mình, nếu không hồ sơ thiết yếu sẽ không được ghi

Tệp Zip. lấy thông tin[tên]

Trả về một đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 với thông tin về tên thành viên lưu trữ. Gọi
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
1 cho một tên hiện không có trong kho lưu trữ sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
93

Tệp Zip. danh sách thông tin[]

Trả về danh sách chứa đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 cho mỗi thành viên của kho lưu trữ. Các đối tượng có cùng thứ tự với các mục nhập của chúng trong tệp ZIP thực trên đĩa nếu một kho lưu trữ hiện có được mở

Tệp Zip. danh sách tên[]

Trả về danh sách các thành viên lưu trữ theo tên

Tệp Zip. mở[tên , chế độ='r', pwd=None, *, force_zip64=False]

Truy cập một thành viên của kho lưu trữ dưới dạng một đối tượng giống như tệp nhị phân. tên có thể là tên của tệp trong kho lưu trữ hoặc đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91. Tham số chế độ, nếu có, phải là
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0 [mặc định] hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1. pwd là mật khẩu được sử dụng để giải mã các tệp ZIP được mã hóa dưới dạng đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
99 cũng là một trình quản lý bối cảnh và do đó hỗ trợ câu lệnh
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]

Với chế độ

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0, đối tượng giống như tệp [
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
22] ở chế độ chỉ đọc và cung cấp các phương thức sau.
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
23,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
24,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
25,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
26,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
27,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
28,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
29. Các đối tượng này có thể hoạt động độc lập với ZipFile

Với

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
400, một xử lý tệp có thể ghi được trả về, hỗ trợ phương thức
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
401. Trong khi trình xử lý tệp có thể ghi được mở, việc cố gắng đọc hoặc ghi các tệp khác trong tệp ZIP sẽ gây ra lỗi
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402

Khi ghi tệp, nếu kích thước tệp không được biết trước nhưng có thể vượt quá 2 GiB, hãy vượt qua

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
403 để đảm bảo rằng định dạng tiêu đề có khả năng hỗ trợ các tệp lớn. Nếu kích thước tệp được biết trước, hãy tạo một đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 với bộ
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
405 và sử dụng đối tượng đó làm tham số tên

Ghi chú

Các phương thức

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
99,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
23 và
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
408 có thể lấy tên tệp hoặc đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91. Bạn sẽ đánh giá cao điều này khi cố gắng đọc tệp ZIP chứa các thành viên có tên trùng lặp

Đã thay đổi trong phiên bản 3. 6. Đã xóa hỗ trợ của

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
00. Sử dụng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01 để đọc các tệp văn bản nén ở chế độ dòng mới chung .

Đã thay đổi trong phiên bản 3. 6.

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02 hiện có thể được sử dụng để ghi tệp vào kho lưu trữ với tùy chọn
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
400.

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
99 trên ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Tệp Zip. trích xuất[thành viên , đường dẫn=None, pwd=None]

Trích xuất một thành viên từ kho lưu trữ vào thư mục làm việc hiện tại; . Thông tin tệp của nó được trích xuất chính xác nhất có thể. đường dẫn chỉ định một thư mục khác để giải nén vào. thành viên có thể là tên tệp hoặc đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91. pwd là mật khẩu được sử dụng cho các tệp được mã hóa dưới dạng đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98

Trả về đường dẫn đã chuẩn hóa được tạo [một thư mục hoặc tệp mới]

Ghi chú

Nếu tên tệp thành viên là một đường dẫn tuyệt đối, một điểm chia sẻ ổ đĩa/UNC và dấu gạch chéo đầu [lưng] sẽ bị xóa, e. g.

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
10 trở thành
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
11 trên Unix và
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 trở thành
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
13 trên Windows. Và tất cả các thành phần
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
14 trong tên tệp thành viên sẽ bị xóa, e. g.
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
15 trở thành
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
16. Trên Windows, các ký tự không hợp lệ [________ 017, ________ 018, _______ 019,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
20,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
21,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
22 và
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
23] được thay thế bằng dấu gạch dưới [
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
24]

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
408 trên ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Đã thay đổi trong phiên bản 3. 6. 2. Tham số đường dẫn chấp nhận một đối tượng giống như đường dẫn .

Tệp Zip. giải nén[đường dẫn=Không có, members=None, pwd=None]

Trích xuất tất cả các thành viên từ kho lưu trữ vào thư mục làm việc hiện tại. đường dẫn chỉ định một thư mục khác để giải nén vào. thành viên là tùy chọn và phải là một tập hợp con của danh sách được trả về bởi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
28. pwd là mật khẩu được sử dụng cho các tệp được mã hóa dưới dạng đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98

Cảnh báo

Không bao giờ trích xuất tài liệu lưu trữ từ các nguồn không đáng tin cậy mà không kiểm tra trước. Có thể các tệp được tạo bên ngoài đường dẫn, e. g. các thành viên có tên tệp tuyệt đối bắt đầu bằng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
30 hoặc tên tệp có hai dấu chấm
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
14. Mô-đun này cố gắng ngăn chặn điều đó. Xem ghi chú
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
408

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
33 trên ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Đã thay đổi trong phiên bản 3. 6. 2. Tham số đường dẫn chấp nhận một đối tượng giống như đường dẫn .

Tệp Zip. printdir[]

In mục lục cho kho lưu trữ tới

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
36

Tệp Zip. đặt mật khẩu[pwd]

Đặt pwd [một đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98] làm mật khẩu mặc định để giải nén các tệp được mã hóa

Tệp Zip. đọc[tên , pwd=None]

Trả lại các byte của tên tệp trong kho lưu trữ. tên là tên của tệp trong kho lưu trữ hoặc đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91. Kho lưu trữ phải được mở để đọc hoặc nối thêm. pwd là mật khẩu được sử dụng cho các tệp được mã hóa dưới dạng đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98 và, nếu được chỉ định, sẽ ghi đè mật khẩu mặc định được đặt bằng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
40. Gọi
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
23 trên ZipFile sử dụng phương pháp nén khác với
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
03 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
04 sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
05. Lỗi cũng sẽ xuất hiện nếu mô-đun nén tương ứng không khả dụng

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
23 trên ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Tệp Zip. testzip[]

Đọc tất cả các tệp trong kho lưu trữ và kiểm tra CRC của chúng và tiêu đề tệp. Trả về tên của tệp xấu đầu tiên, nếu không thì trả về

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
50

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
51 trên ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Tệp Zip. ghi[tên tệp , tên vòng cung=None, compress_type=None, compresslevel=None]

Ghi tệp có tên tệp vào kho lưu trữ, đặt cho nó tên kho lưu trữ là tên vòng cung [theo mặc định, tên này sẽ giống với tên tệp, nhưng không có ký tự ổ đĩa và đã xóa các dấu phân cách đường dẫn ở đầu]. Nếu được cung cấp, nén_type sẽ ghi đè giá trị đã cung cấp cho tham số nén cho hàm tạo cho mục nhập mới. Tương tự, mức nén sẽ ghi đè hàm tạo nếu được cung cấp. Kho lưu trữ phải được mở với chế độ

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2

Ghi chú

Trước đây, tiêu chuẩn tệp ZIP không chỉ định mã hóa siêu dữ liệu, nhưng khuyến nghị mạnh mẽ CP437 [mã hóa PC IBM gốc] để có khả năng tương tác. Các phiên bản gần đây cho phép sử dụng UTF-8 [chỉ]. Trong mô-đun này, UTF-8 sẽ tự động được sử dụng để ghi tên thành viên nếu chúng chứa bất kỳ ký tự không phải ASCII nào. Không thể viết tên thành viên trong bất kỳ bảng mã nào khác ngoài ASCII hoặc UTF-8

Ghi chú

Tên lưu trữ phải liên quan đến thư mục gốc, nghĩa là chúng không được bắt đầu bằng dấu phân cách đường dẫn

Ghi chú

Nếu

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
57 [hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
58, nếu không cung cấp
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
57] chứa byte rỗng, tên của tệp trong kho lưu trữ sẽ bị cắt bớt ở byte rỗng

Ghi chú

Dấu gạch chéo ở đầu tên tệp có thể dẫn đến việc không thể mở tệp lưu trữ trong một số chương trình zip trên hệ thống Windows

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
401 trên ZipFile được tạo bằng chế độ
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0 hoặc ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Tệp Zip. writestr[zinfo_or_arcname , dữ liệu, compress_type=None, compresslevel=None]

Viết một tập tin vào kho lưu trữ. Nội dung là dữ liệu, có thể là một phiên bản

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
64 hoặc một phiên bản
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98; . zinfo_or_arcname là tên tệp mà nó sẽ được cung cấp trong kho lưu trữ hoặc một phiên bản
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91. Nếu đó là một phiên bản, ít nhất phải cung cấp tên tệp, ngày và giờ. Nếu đó là tên, ngày và giờ được đặt thành ngày và giờ hiện tại. Kho lưu trữ phải được mở với chế độ
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2

Nếu được cung cấp, nén_type sẽ ghi đè giá trị đã cung cấp cho tham số nén vào hàm tạo cho mục nhập mới hoặc trong zinfo_or_arcname [nếu đó là phiên bản

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91]. Tương tự, mức nén sẽ ghi đè hàm tạo nếu được cung cấp

Ghi chú

Khi chuyển một phiên bản

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 dưới dạng tham số zinfo_or_arcname, phương thức nén được sử dụng sẽ là phương thức được chỉ định trong thành phần nén_type của phiên bản
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 đã cho. Theo mặc định, hàm tạo
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 đặt thành viên này thành
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01

Đã thay đổi trong phiên bản 3. 2. Đối số kiểu nén.

Đã thay đổi trong phiên bản 3. 6. Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
76 trên ZipFile được tạo bằng chế độ
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
0 hoặc ZipFile đã đóng sẽ tăng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
402. Trước đây, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 đã được nâng lên.

Tệp Zip. mkdir[zinfo_or_directory , mode=511]

Tạo một thư mục bên trong kho lưu trữ. Nếu zinfo_or_directory là một chuỗi, một thư mục được tạo bên trong kho lưu trữ với chế độ được chỉ định trong đối số chế độ. Tuy nhiên, nếu zinfo_or_directory là một phiên bản

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 thì đối số chế độ sẽ bị bỏ qua

Kho lưu trữ phải được mở với chế độ

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2

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

Các thuộc tính dữ liệu sau đây cũng có sẵn

Tệp Zip. tên tệp

Tên của tệp ZIP

Tệp Zip. gỡ lỗi

Mức đầu ra gỡ lỗi để sử dụng. Điều này có thể được đặt từ

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
80 [mặc định, không có đầu ra] thành
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
85 [đầu ra nhiều nhất]. Thông tin gỡ lỗi được ghi vào
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
36

Tệp Zip. bình luận

Nhận xét được liên kết với tệp ZIP dưới dạng đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98. Nếu chỉ định nhận xét cho phiên bản
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3 được tạo bằng chế độ
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
1,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
3 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
2, thì nhận xét đó không được dài hơn 65535 byte. Nhận xét dài hơn mức này sẽ bị cắt bớt

Đối tượng đường dẫn¶

lớp tệp zip. Đường dẫn[gốc , tại='']

Xây dựng một đối tượng Đường dẫn từ một tệp zip

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
92 [có thể là một phiên bản
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
94 phù hợp để chuyển đến hàm tạo
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3]

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
96 chỉ định vị trí của Đường dẫn này trong tệp zip, e. g. 'thư mục/tệp. txt’, ‘dir/’ hoặc ‘’. Mặc định là chuỗi rỗng, cho biết thư mục gốc

Đối tượng đường dẫn hiển thị các tính năng sau của đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
97

Các đối tượng đường dẫn có thể duyệt được bằng cách sử dụng toán tử

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98 hoặc
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
99

Đường dẫn. tên

Thành phần đường dẫn cuối cùng

Đường dẫn. mở[mode='r' , *, pwd, **]

Gọi

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02 trên đường dẫn hiện tại. Cho phép mở để đọc hoặc ghi, văn bản hoặc nhị phân thông qua các chế độ được hỗ trợ. 'r', 'w', 'rb', 'wb'. Các đối số vị trí và từ khóa được chuyển đến
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01 khi được mở dưới dạng văn bản và bị bỏ qua nếu không.
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
02 là tham số
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
02 của
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
02

Đã thay đổi trong phiên bản 3. 9. Đã thêm hỗ trợ cho chế độ văn bản và nhị phân để mở. Chế độ mặc định bây giờ là văn bản.

Đường dẫn. iterdir[]

Liệt kê các phần tử con của thư mục hiện hành

Đường dẫn. is_dir[]

Trả về

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
5 nếu bối cảnh hiện tại tham chiếu đến một thư mục

Đường dẫn. is_file[]

Trả lại

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
5 nếu bối cảnh hiện tại tham chiếu đến một tệp

Đường dẫn. tồn tại[]

Trả lại

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
5 nếu bối cảnh hiện tại tham chiếu đến một tệp hoặc thư mục trong tệp zip

Đường dẫn. hậu tố

Phần mở rộng tệp của thành phần cuối cùng

Mới trong phiên bản 3. 11. Đã thêm thuộc tính

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
08.

Đường dẫn. thân cây

Thành phần đường dẫn cuối cùng, không có hậu tố

Mới trong phiên bản 3. 11. Đã thêm thuộc tính

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
09.

Đường dẫn. hậu tố

Danh sách các phần mở rộng tệp của đường dẫn

Mới trong phiên bản 3. 11. Đã thêm thuộc tính

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
10.

Đường dẫn. read_text[* , *]

Đọc tệp hiện tại dưới dạng văn bản unicode. Các đối số vị trí và từ khóa được chuyển đến

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
01 [ngoại trừ
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
12, được ngụ ý bởi ngữ cảnh]

Đường dẫn. read_byte[]

Đọc tệp hiện tại dưới dạng byte

Đường dẫn. đường dẫn tham gia[*khác]

Trả về một đối tượng Đường dẫn mới với từng đối số khác đã tham gia. Sau đây là tương đương

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'

Đã thay đổi trong phiên bản 3. 10. Trước 3. 10,

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
99 không có giấy tờ và được chấp nhận chính xác một tham số.

Dự án zipp cung cấp các bản sao của chức năng đối tượng đường dẫn mới nhất cho các Python cũ hơn. Sử dụng

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
14 thay cho
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
15 để tiếp cận sớm các thay đổi

Đối tượng PyZipFile¶

Hàm tạo

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
16 nhận các tham số giống như hàm tạo
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3 và một tham số bổ sung, tối ưu hóa

lớp tệp zip. PyZipFile[tệp , chế độ='r', compression=ZIP_STORED, allowZip64=True, optimize=- 1]

Mới trong phiên bản 3. 2. Tham số tối ưu hóa.

Đã thay đổi trong phiên bản 3. 4. Tiện ích ZIP64 được bật theo mặc định.

Các trường hợp có một phương thức ngoài các phương thức của đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3

writepy[tên đường dẫn , tên cơ sở='', filterfunc=None]

Tìm kiếm tệp

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
19 và thêm tệp tương ứng vào kho lưu trữ

Nếu tham số tối ưu hóa cho

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
16 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
21 không được cung cấp, thì tệp tương ứng là tệp
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
22, biên dịch nếu cần

Nếu tham số tối ưu hóa cho

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
16 là
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
80,
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
84 hoặc
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
26, thì chỉ những tệp có mức tối ưu hóa đó [xem
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
27] mới được thêm vào kho lưu trữ, biên dịch nếu cần

Nếu tên đường dẫn là một tệp, tên tệp phải kết thúc bằng

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
28 và chỉ tệp [tương ứng với
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
22] được thêm vào ở cấp cao nhất [không có thông tin đường dẫn]. Nếu tên đường dẫn là một tệp không kết thúc bằng
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
28, một
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
12 sẽ được nâng lên. Nếu đó là một thư mục và thư mục không phải là thư mục gói, thì tất cả các tệp
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
22 sẽ được thêm vào ở cấp cao nhất. Nếu thư mục là thư mục gói, thì tất cả
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
22 được thêm vào bên dưới tên gói dưới dạng đường dẫn tệp và nếu bất kỳ thư mục con nào là thư mục gói, thì tất cả những thư mục này được thêm vào theo cách đệ quy theo thứ tự đã sắp xếp

tên cơ sở chỉ dành cho sử dụng nội bộ

filterfunc, nếu được cung cấp, phải là một hàm nhận một đối số chuỗi đơn. Nó sẽ được chuyển qua từng đường dẫn [bao gồm từng đường dẫn tệp đầy đủ riêng lẻ] trước khi được thêm vào kho lưu trữ. Nếu filterfunc trả về giá trị sai, đường dẫn sẽ không được thêm vào và nếu đó là một thư mục thì nội dung của nó sẽ bị bỏ qua. Ví dụ: nếu tất cả các tệp thử nghiệm của chúng tôi đều nằm trong thư mục

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
34 hoặc bắt đầu bằng chuỗi
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
35, chúng tôi có thể sử dụng bộ lọcfunc để loại trừ chúng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
0

Phương thức

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
36 tạo các tệp lưu trữ có tên tệp như thế này

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
1

Mới trong phiên bản 3. 4. Tham số filterfunc.

Đã thay đổi trong phiên bản 3. 6. 2. Tham số tên đường dẫn chấp nhận một đối tượng giống như đường dẫn .

Đã thay đổi trong phiên bản 3. 7. Đệ quy sắp xếp các mục trong thư mục.

Đối tượng ZipInfo¶

Các thể hiện của lớp

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 được trả về bởi các phương thức
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
1 và
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
2 của đối tượng
with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
3. Mỗi đối tượng lưu trữ thông tin về một thành viên của kho lưu trữ ZIP

Có một phương pháp phân loại để tạo phiên bản

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 cho tệp hệ thống tệp

phương thức phân lớp ZipInfo. from_file[tên tệp , arcname=None, *, strict_timestamps=True]

Xây dựng phiên bản

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
91 cho một tệp trên hệ thống tệp, để chuẩn bị thêm tệp đó vào tệp zip

tên tệp phải là đường dẫn đến tệp hoặc thư mục trên hệ thống tệp

Nếu tên cung được chỉ định, nó sẽ được sử dụng làm tên trong kho lưu trữ. Nếu tên cung không được chỉ định, tên sẽ giống như tên tệp, nhưng với bất kỳ ký tự ổ đĩa và dấu tách đường dẫn đầu nào đã bị xóa

Đối sốstrict_timestamps, khi được đặt thành

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
6, cho phép nén các tệp cũ hơn 1980-01-01 với chi phí đặt dấu thời gian thành 1980-01-01. Hành vi tương tự xảy ra với các tệp mới hơn 2107-12-31, dấu thời gian cũng được đặt thành giới hạn

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

Đã thay đổi trong phiên bản 3. 6. 2. Tham số tên tệp chấp nhận một đối tượng giống như đường dẫn .

Mới trong phiên bản 3. 8. Đối số chỉ dành cho từ khóastrict_timestamp

Các trường hợp có các phương thức và thuộc tính sau

ZipInfo. is_dir[]

Trả lại

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
5 nếu thành viên lưu trữ này là một thư mục

Điều này sử dụng tên của mục nhập. các thư mục phải luôn kết thúc bằng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98

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

ZipInfo. tên tệp

Tên của tập tin trong kho lưu trữ

ZipInfo. date_time

Thời gian và ngày sửa đổi lần cuối đối với thành viên lưu trữ. Đây là một bộ sáu giá trị

Mục lục

Giá trị

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
80

Năm [>= 1980]

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
84

Tháng [dựa trên một]

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
26

Ngày trong tháng [dựa trên một]

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
85

Giờ [dựa trên số không]

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
50

Phút [dựa trên số không]

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
51

Giây [dựa trên số không]

Ghi chú

Định dạng tệp ZIP không hỗ trợ dấu thời gian trước năm 1980

ZipInfo. compress_type

Loại nén cho thành viên lưu trữ

ZipInfo. bình luận

Nhận xét cho thành viên lưu trữ cá nhân dưới dạng đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98

ZipInfo. thêm

Dữ liệu trường mở rộng. Ghi chú Ứng dụng PKZIP chứa một số nhận xét về cấu trúc bên trong của dữ liệu chứa trong đối tượng

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
98 này

ZipInfo. tạo_hệ thống

Hệ thống đã tạo kho lưu trữ ZIP

ZipInfo. create_version

Phiên bản PKZIP đã tạo kho lưu trữ ZIP

ZipInfo. extract_version

Phiên bản PKZIP cần thiết để giải nén kho lưu trữ

ZipInfo. dành riêng

phải bằng không

ZipInfo. flag_bits

Bit cờ ZIP

ZipInfo. âm lượng

Số lượng của tiêu đề tập tin

ZipInfo. internal_attr

Thuộc tính nội bộ

ZipInfo. external_attr

Thuộc tính tệp bên ngoài

ZipInfo. header_offset

Bù byte cho tiêu đề tệp

ZipInfo. CRC

CRC-32 của tệp không nén

ZipInfo. compress_size

Kích thước của dữ liệu nén

ZipInfo. file_size

Kích thước của tệp không nén

Giao diện dòng lệnh¶

Mô-đun

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
40 cung cấp giao diện dòng lệnh đơn giản để tương tác với kho lưu trữ ZIP

Nếu bạn muốn tạo một kho lưu trữ ZIP mới, hãy chỉ định tên của nó sau tùy chọn

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
55 và sau đó liệt kê [các] tên tệp cần được đưa vào

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
8

Đi qua một thư mục cũng được chấp nhận

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
0

Nếu bạn muốn giải nén tệp lưu trữ ZIP vào thư mục đã chỉ định, hãy sử dụng tùy chọn

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
56

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
9

Để biết danh sách các tệp trong kho lưu trữ ZIP, hãy sử dụng tùy chọn

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
57

with ZipFile['spam.zip'] as myzip:
    with myzip.open['eggs.txt'] as myfile:
        print[myfile.read[]]
2

Tùy chọn dòng lệnh¶

-l --list

Liệt kê các tệp trong một zipfile

-c . --tạo ...

Tạo zipfile từ các tệp nguồn

-e --extract

Giải nén zipfile vào thư mục đích

-t --test

Kiểm tra xem zipfile có hợp lệ hay không

--mã hóa siêu dữ liệu

Chỉ định mã hóa tên thành viên cho

>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
57,
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
56 và
>>> Path[...].joinpath['child'].joinpath['grandchild']
>>> Path[...].joinpath['child', 'grandchild']
>>> Path[...] / 'child' / 'grandchild'
60

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

Cạm bẫy giải nén¶

Quá trình trích xuất trong mô-đun zipfile có thể không thành công do một số cạm bẫy được liệt kê bên dưới

Từ chính tập tin¶

Quá trình giải nén có thể không thành công do nhập sai mật khẩu/tổng ​​kiểm tra CRC/định dạng ZIP hoặc phương pháp nén/giải mã không được hỗ trợ

Giới hạn hệ thống tập tin¶

Vượt quá giới hạn trên các hệ thống tệp khác nhau có thể khiến quá trình giải nén không thành công. Chẳng hạn như các ký tự được phép trong các mục nhập thư mục, độ dài của tên tệp, độ dài của tên đường dẫn, kích thước của một tệp và số lượng tệp, v.v.

Giới hạn tài nguyên¶

Việc thiếu bộ nhớ hoặc dung lượng ổ đĩa sẽ dẫn đến việc giải nén không thành công. Ví dụ: bom giải nén [hay còn gọi là bom ZIP] áp dụng cho thư viện zipfile có thể gây cạn dung lượng ổ đĩa

Gián đoạn¶

Gián đoạn trong quá trình giải nén, chẳng hạn như nhấn control-C hoặc tắt quá trình giải nén có thể dẫn đến việc giải nén tệp lưu trữ không đầy đủ

Các hành vi trích xuất mặc định¶

Không biết các hành vi trích xuất mặc định có thể gây ra kết quả giải nén không mong muốn. Ví dụ: khi giải nén cùng một kho lưu trữ hai lần, nó sẽ ghi đè lên các tệp mà không hỏi

Bạn có thể nén một tệp không?

Để nén [nén] tệp hoặc thư mục . Nhấn và giữ [hoặc bấm chuột phải vào] tệp hoặc thư mục, chọn [hoặc trỏ tới] Gửi tới rồi chọn Thư mục nén [nén] . Một thư mục nén mới có cùng tên được tạo ở cùng một vị trí.

Làm cách nào bạn có thể gộp tất cả mã Python của mình vào một tệp ZIP duy nhất?

Bạn có thể sử dụng mô-đun zipapp từ thư viện chuẩn để tạo kho lưu trữ zip Python có thể thực thi . Nó có sẵn từ Python 3. 5 trở đi. Một cách để tạo gói là thêm tệp cấp cao nhất có tên __main__. py , đây sẽ là tập lệnh mà Python chạy khi tệp lưu trữ thực thi zip được thực thi.

Làm cách nào để cài đặt tệp ZIP trong Python?

Để biết thêm thông tin, hãy xem Python Setuptools. .
Tải xuống tệp zip pynrfjprog
Giải nén tệp zip đã nén và mở cửa sổ Dấu nhắc Lệnh trong thư mục đó
Nhập thiết lập python. py cài đặt tại Dấu nhắc Lệnh. Nội dung của gói sẽ được thêm vào thư mục mặc định của Python

Chủ Đề