Làm cách nào để đọc tệp ZIP trong 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 Shutil
Cả 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 tệp ZIP từ thư mục có 4
Tham 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 6Nén thư mục này thành tệp ZIP 8 trong thư mục hiện tại 8nguồn. zip_archive. py 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ư 33
nguồn. zip_archive. py 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 5
Tham số đầu tiên 36 là đường dẫn của tệp ZIP và tham số thứ hai 37 là đường dẫn của thư mục đích nơi lưu trữ được trích xuất________số 8 nguồn. zip_archive. py Nó được trích xuất như sau 3Mặ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 37 (đã xác nhận trong Python 3. 9. 9)Tệp ZIP được tạo bởi 4 với 33 được giải nén như sau 4nguồn. zip_archive. py 5Khá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ê tệp ZIP
Các đối tượng 6 được tạo bằng cách chỉ định tham số đầu tiên 44 (đường dẫn của tệp ZIP) và tham số thứ hai 45 (đọc 46, viết 47, nối thêm 48, v.v. ) cho hàm tạo 49Đối tượng 6 cần được đóng bằng phương thức 51, nhưng nếu bạn sử dụng câu lệnh 52, nó sẽ tự động được đóng khi khối kết thúcCách sử dụng cũng tương tự như đọc ghi file có sẵn hàm 53 như chỉ định chế độ và sử dụng câu lệnh 52
Cá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 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 56Với 49, chỉ định đường dẫn của tệp ZIP mới được tạo làm tham số đầu tiên 44 và đặt tham số thứ hai 45 thành 47 (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ố 61 và 62Phương pháp nén 61 như sau;
Đối với 68, mức nén 62 tương ứng với 50 của 51. Mặc định là 52 ( 53)
Phương thức 56 của đối tượng 6 ghi tệp có tên tham số đầu tiên là 36 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à 57. Nếu bỏ qua 57, 36 đượ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 57
6nguồn. zip_archive. py Bạn cũng có thể chọn phương thức nén và cấp độ cho từng tệp bằng cách chỉ định 71 và 62 trong phương thức 56Thê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 49, hãy đặt tham số đầu tiên 44 thành đường dẫn của tệp ZIP hiện có và tham số thứ hai 45 thành 48 (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 56 của đối tượng 6Sau đây là một ví dụ về việc thêm 800 vào thư mục hiện tại. Đối số 57 bị bỏ qua 5nguồn. zip_archive. py 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 53 của đối tượng 6 với chế độ chắp thêm ( 48)
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 45 thành 47Bạn có thể viết nội dung bằng phương thức 56 của đối tượng tệp đã mở 7nguồn. zip_archive. py Đối số của 56 nên được chỉ định là 809, không phải là 810. Để viết một văn bản, hãy sử dụng 811 hoặc chuyển đổi nó bằng phương pháp 812 của 810 80nguồn. zip_archive. py Một ví dụ về việc đọc một tệp trong ZIP với 53 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à 44 làm đường dẫn của tệp ZIP hiện có và tham số thứ hai 45 là 46 (đã đọc). Có thể bỏ qua 45 vì mặc định là 46Bạn có thể lấy danh sách các mục đã lưu trữ bằng phương thức 822 của đối tượng 6
81nguồn. zip_archive. py 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
82nguồn. zip_archive. py 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 ( 46, 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 827
Tham số đầu tiên 828 là tên file cần giải nén (bao gồm cả thư mục trong file zip) và tham số thứ hai 829 là đường dẫn đến thư mục cần giải nén 83nguồn. zip_archive. py 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 830. Chỉ định đường dẫn của thư mục để trích xuất làm đối số đầu tiên 829
84nguồn. zip_archive. py Trong cả hai trường hợp, nếu bỏ qua 829, các 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 829 (đã 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 53Đối số đầu tiên của 53 là tên của tệp trong ZIP (có thể bao gồm thư mục). Đối số thứ hai 45 có thể được bỏ qua vì giá trị mặc định là 46 (đã đọc)Có thể đọc nội dung bằng phương pháp 839 của đối tượng tệp đã mở. Một chuỗi byte 809 được trả về, có thể được chuyển đổi thành chuỗi 810 bằng phương thức 842 85nguồn. zip_archive. py Ngoài 839, có thể sử dụng 844 và 845 cũng như đối tượng tệp được mở bằng chức năng tích hợp sẵn 53
ZIP 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 849 bằng 850 và đặt mật khẩu bằng phương thức 851. Lưu ý rằng bạn cần chỉ định mật khẩu bằng chuỗi byte 809 86nguồn. zip_archive. py Sau đây là một ví dụ về giải nén tệp ZIP bằng mật khẩu 87nguồn. zip_archive. py Tất nhiên nếu sai mật khẩu thì không thể giải mã được 88nguồn. zip_archive. py 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 89nguồn. zip_archive. py Thực hiện lệnh với shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 853Bạn cũng có thể sử dụng 853 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 855 của 7-zip (yêu cầu cài đặt) làm ví dụ 0nguồn. zip_archive. py Tương đương với các lệnh sau. 856 là bản mở rộng. Lưu ý rằng 857 và 858 không yêu cầu khoảng trắng
Làm cách nào để đọc tệp zip trong gấu trúc Python?Phương pháp #1. Sử dụng nén=zip trong gấu trúc. phương thức read_csv() . Bằng cách gán đối số nén trong phương thức read_csv() dưới dạng zip, trước tiên, gấu trúc sẽ giải nén zip và sau đó sẽ tạo khung dữ liệu từ tệp CSV có trong tệp nén.
Python có thể nhập tệp ZIP không?Python cho phép bạn nhập mã trực tiếp từ tệp ZIP thông qua nhập Zip . Tính năng tích hợp thú vị này cho phép bạn nén mã Python cho mục đích phân phối. Nhập zip cũng hữu ích nếu bạn thường xuyên làm việc với mã Python có trong tệp ZIP.
Làm cách nào để giải nén tệp zip bằng mật khẩu Python?Trích xuất Zip bằng mật khẩu
. Bạn phải chuyển một mật khẩu tính bằng byte. Để chuyển đổi str thành byte, hãy sử dụng byte phương thức tích hợp sẵn của Pythons với định dạng mã hóa utf-8. pass a value to pwd positional argument of extract(pwd = password) or extractall(pwd = password) methods. You must pass a password which is in bytes. To convert a str to bytes use the Pythons built-in method bytes with utf-8 encode format. |