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 Show
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 ZipLớ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 đườngTrì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ệpLớ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))¶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())7tệ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-ZIPThô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 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())93Tệ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())36Tệ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óaTệ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ạ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())36Tệ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óalớ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())3writepy(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ệpphươ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())98ZipInfo. 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àyZipInfo. 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¶-lLiệt kê các tệp trong một zipfile -cTạo zipfile từ các tệp nguồn -eGiải nén zipfile vào thư mục đích -tKiểm tra xem zipfile có hợp lệ hay không --mã hóa siêu dữ liệuChỉ đị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 |