Làm cách nào để giải nén tệp zip bằng python?
Trong Python, bạn có thể nén và giải nén tệp, tôi. e. , nén tệp thành tệp ZIP và giải nén tệp ZIP bằng mô-đun zipfile Show
Ngoài ra, bạn có thể dễ dàng nén một thư mục (thư mục) và giải nén tệp ZIP bằng 2 và 3 của mô-đun ShutilCả hai đều có trong thư viện chuẩn nên không cần cài đặt thêm Bài viết này mô tả các nội dung sau
Liên kết được tài trợ Zip một thư mục (thư mục). shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 4Bạn có thể nén một thư mục (folder), tôi. e. , tạo một tệp ZIP từ một thư mục có 4Tham số đầu tiên 9 là đường dẫn không có phần mở rộng của tệp ZIP cần tạo, tham số thứ hai 0 là định dạng lưu trữ ( 1, 2, 3, 4, 5) và tham số thứ ba 6 là đường dẫn của thư mục cần nénVí dụ: giả sử có một thư mục 7 với cấu trúc sau trong thư mục hiện tại
Nén thư mục này thành tệp ZIP 8 trong thư mục hiện tại
nguồn. Trong trường hợp này, bản thân thư mục được chỉ định 7 không được bao gồm trong 8Nếu bạn muốn bao gồm chính thư mục đó, hãy chỉ định đường dẫn của thư mục trên của thư mục đích trong tham số thứ ba 6 và đường dẫn tương đối của thư mục đích từ 6 trong tham số thứ tư 3
nguồn. Xem phần tiếp theo để biết kết quả giải nén Giải nén một tập tin. shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 5Bạn có thể giải nén một tập tin, tôi. e. , trích xuất tất cả nội dung của tệp ZIP bằng 5Tham số đầu tiên 6 là đường dẫn của tệp ZIP và tham số thứ hai 7 là đường dẫn của thư mục đích nơi tệp lưu trữ được trích xuất________số 8_______ nguồn. Nó được trích xuất như sau
Mặc dù tài liệu không chỉ định nó, nhưng nó dường như tạo một thư mục mới ngay cả khi 7 không tồn tại (đã được xác nhận trong Python 3. 9. 9)Tệp ZIP được tạo bởi 4 với 3 được trích xuất như sau
nguồn.
Khái niệm cơ bản về mô-đun zipfile. shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 6 đối tượngMô-đun zipfile cung cấp lớp 6 để tạo, đọc, viết, nối thêm và liệt kê một tệp ZIPCác đối tượng 6 được tạo bằng cách chỉ định tham số đầu tiên 4 (đường dẫn của tệp ZIP) và tham số thứ hai 5 (đọc 6, viết 7, nối thêm 8, v.v. ) cho nhà xây dựng 9Đối tượng 6 cần được đóng lại bằng phương thức 1, nhưng nếu bạn sử dụng câu lệnh 2, nó sẽ tự động được đóng lại khi khối kết thúcCách sử dụng cũng tương tự như đọc ghi file với hàm có sẵn 3, chẳng hạn như chỉ định chế độ và sử dụng câu lệnh 2Các ví dụ cụ thể được mô tả trong các phần sau Nén các tệp riêng lẻ thành một tệp ZIPĐể nén các tệp riêng lẻ thành một tệp ZIP, hãy tạo một đối tượng 6 mới và thêm các tệp bạn muốn nén bằng phương pháp 6Với 9, chỉ định đường dẫn của tệp ZIP mới được tạo làm tham số đầu tiên 4 và đặt tham số thứ hai 5 thành 7 (ghi)Ở chế độ ghi, bạn cũng có thể chỉ định phương pháp nén và mức độ với các tham số 1 và 2Phương pháp nén 1 như sau;
Đối với 8, mức độ nén 2 tương ứng với 0 của 1. Mặc định là 2 ( 3)
Phương thức 6 của đối tượng 6 ghi tệp có tên tham số đầu tiên là 6 vào một tệp ZIP, cung cấp cho nó tên lưu trữ (= tên trong ZIP) tham số thứ hai là 7. Nếu 7 bị bỏ qua, thì ____23_______6 được sử dụng làm tên lưu trữ. Bạn có thể chỉ định cấu trúc thư mục cho 7
nguồn. Bạn cũng có thể chọn phương pháp nén và cấp độ cho từng tệp bằng cách chỉ định 1 và 2 trong phương thức 6Thêm các tệp khác vào tệp ZIP hiện cóĐể thêm các tệp khác vào tệp ZIP hiện có, với 9, hãy đặt tham số đầu tiên 4 thành đường dẫn của tệp ZIP hiện có và tham số thứ hai 5 thành 8 (nối thêm)Thêm các tệp hiện cóBạn có thể thêm các tệp hiện có bằng phương thức 6 của đối tượng 6Sau đây là một ví dụ về việc thêm 00 vào thư mục hiện tại. Đối số 7 bị bỏ qua
nguồn. Tạo và thêm một tệp mớiBạn cũng có thể tạo một tệp mới và thêm nó. Sử dụng phương thức 3 của đối tượng 6 với chế độ chắp thêm ( 8)Chỉ định đường dẫn của tệp mới tạo trong ZIP làm tham số đầu tiên và đặt tham số thứ hai 5 thành 7Bạn có thể viết nội dung bằng phương thức 6 của đối tượng tệp đã mở
nguồn. Đối số của 6 nên được chỉ định là 09, không phải là 10. Để viết một văn bản, hãy sử dụng 11 hoặc chuyển đổi nó bằng phương pháp 12 của 10 0nguồn. Một ví dụ về việc đọc một tệp trong ZIP với 3 của đối tượng 6 được mô tả sauLiên kết được tài trợ Kiểm tra danh sách các tệp trong tệp ZIPĐể kiểm tra nội dung của tệp ZIP hiện có, hãy tạo một đối tượng 6 với tham số đầu tiên là 4 là đường dẫn của tệp ZIP hiện có và tham số thứ hai là 5 là 6 (đã đọc). Có thể bỏ qua 5 vì giá trị mặc định là 6Bạn có thể lấy danh sách các mục đã lưu trữ bằng phương thức 22 của đối tượng 6 1nguồn. Như bạn có thể thấy từ kết quả ở trên, các tệp ZIP được tạo bằng 4 cũng liệt kê các thư mục riêng lẻ. Điều này cũng đúng với các tệp ZIP được nén bằng chức năng tiêu chuẩn của Finder trên máy MacBạn có thể loại trừ các thư mục có khả năng hiểu danh sách
2nguồn. Trích xuất các tệp riêng lẻ từ tệp ZIPĐể giải nén tệp ZIP, hãy tạo một đối tượng 6 ở chế độ đọc ( 6, mặc định)Nếu bạn chỉ muốn giải nén các tệp cụ thể, hãy sử dụng phương pháp 27Tham số đầu tiên 28 là tên của tệp cần giải nén (bao gồm cả thư mục trong tệp zip) và tham số thứ hai 29 là đường dẫn đến thư mục cần giải nén 3nguồn. Nếu bạn muốn giải nén tất cả các tệp, hãy sử dụng phương pháp 30. Chỉ định đường dẫn của thư mục để trích xuất làm đối số đầu tiên 29 4nguồn. Trong cả hai trường hợp, nếu bỏ qua 29, tệp sẽ được trích xuất vào thư mục hiện tại. Mặc dù tài liệu không chỉ định nó, nhưng nó dường như tạo một thư mục mới ngay cả khi không tồn tại 29 (đã xác nhận trong Python 3. 9. 9)Đọc tệp trong tệp ZIPBạn có thể đọc trực tiếp các tệp trong tệp ZIP Tạo một đối tượng 6 ở chế độ đọc (mặc định) và mở tệp bên trong bằng phương thức 3Đối số đầu tiên của 3 là tên của tệp trong ZIP (có thể bao gồm thư mục). Đối số thứ hai 5 có thể được bỏ qua vì giá trị mặc định là 6 (đọc)Có thể đọc nội dung bằng phương thức 39 của đối tượng tệp đã mở. Một chuỗi byte 09 được trả về, có thể được chuyển đổi thành chuỗi 10 bằng phương thức 42 5nguồn. Ngoài 39, có thể sử dụng 44 và 45 cũng như đối tượng tệp được mở bằng chức năng tích hợp sẵn 3ZIP có mật khẩu (mã hóa và giải mã)Mô-đun zipfile có thể giải mã ZIP bằng mật khẩu (ZIP được mã hóa), nhưng nó không thể mã hóa ZIP
Ngoài ra, AES không được hỗ trợ
Cả 2 và 3 đều không hỗ trợ mã hóa và giải mãdây kéoPyzipper được giới thiệu trong Stack Overflow ở trên hỗ trợ mã hóa và giải mã AES, đồng thời có thể được sử dụng theo cách tương tự như zipfile
Để tạo tệp ZIP bằng mật khẩu, hãy chỉ định 49 với 50 và đặt mật khẩu bằng phương thức 51. Lưu ý rằng bạn cần chỉ định mật khẩu bằng chuỗi byte 09 6nguồn. Sau đây là một ví dụ về giải nén tệp ZIP bằng mật khẩu 7nguồn. Tất nhiên nếu sai mật khẩu thì không thể giải mã được 8nguồn. Mô-đun zipfile cũng cho phép bạn chỉ định mật khẩu, nhưng như đã đề cập ở trên, nó không hỗ trợ AES 9nguồn. Thực hiện lệnh với import shutil shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip') 53Bạn cũng có thể sử dụng 53 nếu zipfile hoặc pyzipper không hoạt động, nhưng lệnh vẫn có thể xử lý nóSử dụng lệnh 55 của 7-zip (yêu cầu cài đặt) làm ví dụ 0nguồn. Tương đương với các lệnh sau. 56 là bản mở rộng. Lưu ý rằng 57 và 58 không yêu cầu dấu cách |