Nén tệp Python
Mô-đun zipfile trong Python cung cấp cách nén các tệp và thư mục thành một tệp zip duy nhất. Điều này hữu ích để giảm kích thước tệp và thư mục mà bạn muốn chia sẻ hoặc chuyển Show
Trong hướng dẫn này, bạn sẽ khám phá cách nén tệp và thư mục bằng Python bằng cách sử dụng mô-đun zipfile. Cũng như nén tệp và thư mục thành tệp zip, mô-đun zipfile cũng có thể được sử dụng để giải nén tệp trong Python Nhập các mô-đunĐể bắt đầu, hãy mở tập lệnh Python hoặc sổ ghi chép Jupyter và nhập mô-đun zipfile và mô-đun toàn cầu. Cả hai mô-đun này đều là một phần của thư viện chuẩn Python và không cần cài đặt riêng. Mô-đun toàn cầu được sử dụng để tìm các tệp và thư mục khớp với một mẫu, trong khi mô-đun zipfile được sử dụng để tạo và giải nén các tệp zip Sử dụng zipfile để nén một tệpĐể nén một tệp vào kho lưu trữ tệp zip, chúng ta cần gọi lớp ZipFile và chuyển tên của tệp zip làm đối số. Sau đó, chúng tôi có thể sử dụng phương pháp
Sử dụng zipfile để nén tất cả các tệp có hậu tố nhất địnhBằng cách sử dụng mô-đun toàn cầu, chúng tôi có thể tìm thấy tất cả các tệp có hậu tố nhất định và sau đó nén chúng thành một tệp zip duy nhất. Ví dụ sau tìm tất cả các tệp có hậu tố 0
Sử dụng zipfile để nén một thư mụcĐể nén tất cả các tệp trong một thư mục thành một tệp zip, chúng ta có thể sử dụng lại mô-đun toàn cầu. Chúng tôi sẽ chuyển tên thư mục này mà chúng tôi muốn nén thành một tệp nén và sau đó là ký tự đại diện dấu hoa thị để làm cho nó bao gồm tất cả các tệp được tìm thấy trong đó. Sau đó, chúng tôi sẽ sử dụng phương pháp
Sử dụng zipfile để nén một số thư mụcChúng tôi có thể sử dụng một cách tiếp cận tương tự để nén một số thư mục vào một tệp zip duy nhất. Ví dụ sau đây nén các thư mục 2 và 3 thành một tệp zip có tên là 4
Sử dụng zipfile để nén tất cả các tệp trong thư mục hiện tạiCuối cùng, chúng ta có thể sử dụng mô-đun toàn cầu để tìm tất cả các tệp trong thư mục hiện tại và sau đó nén chúng thành tệp zip. Ví dụ sau nén tất cả các tệp trong thư mục hiện tại vào một tệp zip có tên là 5Nếu bạn đã sử dụng máy tính một thời gian, có lẽ bạn đã bắt gặp các tệp có định dạng. tiện ích mở rộng zip. Chúng là những tệp đặc biệt có thể chứa nội dung nén của nhiều tệp, thư mục và thư mục con khác. Điều này làm cho chúng khá hữu ích để truyền tệp qua internet. Bạn có biết rằng bạn có thể sử dụng Python để nén hoặc giải nén tệp không? Hướng dẫn này sẽ hướng dẫn bạn cách sử dụng mô-đun zipfile trong Python để giải nén hoặc nén từng tệp hoặc nhiều tệp cùng một lúc Nén các tệp riêng lẻĐiều này là dễ dàng và yêu cầu rất ít mã. Chúng tôi bắt đầu bằng cách nhập mô-đun zipfile và sau đó mở đối tượng ZipFile ở chế độ ghi bằng cách chỉ định tham số thứ hai là 'w'. Tham số đầu tiên là đường dẫn đến chính tệp đó. Đây là mã mà bạn cần 1 import zipfile 2 3 with zipfile.ZipFile('C:\\Stories\\Fantasy\\jungle.zip', 'w') as jungle_zip: 4 jungle_zip.write('C:\\Stories\\Fantasy\\jungle.pdf', compress_type=zipfile.ZIP_DEFLATED) Xin lưu ý rằng tôi sẽ chỉ định đường dẫn trong tất cả các đoạn mã theo định dạng kiểu Windows; Bạn có thể chỉ định các phương pháp nén khác nhau để nén tệp. Các phương thức mới hơn import zipfile23 và import zipfile24 đã được thêm vào phiên bản Python 3. 3 và cũng có một số công cụ khác không hỗ trợ hai phương pháp nén này. Vì lý do này, sẽ an toàn khi chỉ sử dụng phương pháp import zipfile25. Bạn vẫn nên thử các phương pháp này để thấy sự khác biệt về kích thước của tệp nén Nén nhiều tệpĐiều này hơi phức tạp vì bạn cần lặp lại tất cả các tệp. Mã bên dưới sẽ nén tất cả các tệp có phần mở rộng pdf trong một thư mục nhất định 1 import os 2 import zipfile 3 4 import zipfile4 import zipfile5 import zipfile6 import zipfile7 import zipfile8 import zipfile9 20 21 22 23 24 25_______11_______6_______11_______7 Lần này, chúng tôi đã nhập mô-đun import zipfile26 và sử dụng phương pháp import zipfile27 của nó để duyệt qua tất cả các tệp và thư mục con bên trong thư mục gốc của chúng tôi. Tôi chỉ nén các tệp pdf trong thư mục. Bạn cũng có thể tạo các tệp lưu trữ khác nhau cho từng định dạng bằng cách sử dụng câu lệnh import zipfile28 Nếu bạn không muốn giữ nguyên cấu trúc thư mục, bạn có thể đặt tất cả các tệp lại với nhau bằng cách sử dụng dòng sau 1 29 Phương thức import zipfile29 chấp nhận ba tham số. Tham số đầu tiên là tên của tệp mà chúng tôi muốn nén. Tham số thứ hai là tùy chọn và cho phép bạn chỉ định tên tệp khác cho tệp nén. Nếu không có gì được chỉ định, tên ban đầu được sử dụng Giải nén tất cả các tập tinBạn có thể sử dụng phương pháp import zipfile30 để trích xuất tất cả các tệp và thư mục từ tệp zip vào thư mục làm việc hiện tại. Bạn cũng có thể chuyển tên thư mục tới import zipfile30 để giải nén tất cả các tệp và thư mục trong một thư mục cụ thể. Nếu thư mục bạn đã chuyển không tồn tại, phương pháp này sẽ tạo một thư mục cho bạn. Đây là mã mà bạn có thể sử dụng để giải nén tập tin ________9____10_______ 2 3 5 4 7 Nếu bạn muốn giải nén nhiều tệp, bạn sẽ phải cung cấp tên của các tệp bạn muốn giải nén dưới dạng danh sách Giải nén các tệp riêng lẻĐiều này tương tự như giải nén nhiều tệp. Một điểm khác biệt là lần này bạn cần cung cấp tên tệp trước và đường dẫn để giải nén chúng sau. Ngoài ra, bạn cần sử dụng phương pháp import zipfile32 thay vì import zipfile30. Đây là một đoạn mã cơ bản để trích xuất các tệp riêng lẻ 1 import zipfile 2 3 5 4 34 Nhận thông tin về tệpXem xét một tình huống mà bạn cần xem liệu kho lưu trữ zip có chứa một tệp cụ thể hay không. Cho đến thời điểm này, tùy chọn duy nhất của bạn để làm như vậy là giải nén tất cả các tệp trong kho lưu trữ. Tương tự, bạn có thể chỉ cần giải nén những tệp lớn hơn kích thước cụ thể. Mô-đun import zipfile34 cho phép chúng tôi hỏi về nội dung của kho lưu trữ mà không cần giải nén nó Sử dụng phương thức import zipfile35 của đối tượng ZipFile sẽ trả về danh sách tất cả các thành viên của kho lưu trữ theo tên. Để lấy thông tin về một tệp cụ thể trong kho lưu trữ, bạn có thể sử dụng phương thức import zipfile36 của đối tượng ZipFile. Điều này sẽ cung cấp cho bạn quyền truy cập vào thông tin dành riêng cho tệp đó, chẳng hạn như kích thước nén và không nén của tệp hoặc thời gian sửa đổi lần cuối của tệp. Chúng ta sẽ quay lại vấn đề đó sau Gọi phương thức import zipfile36 lần lượt trên tất cả các tệp có thể là một quá trình mệt mỏi khi có nhiều tệp cần được xử lý. Trong trường hợp này, bạn có thể sử dụng phương thức import zipfile38 để trả về danh sách chứa đối tượng import zipfile39 cho mọi thành viên trong kho lưu trữ. Thứ tự của các đối tượng này trong danh sách giống như thứ tự của các tệp zip thực tế Bạn cũng có thể đọc trực tiếp nội dung của một tệp cụ thể từ kho lưu trữ bằng cách sử dụng phương pháp import zipfile40, trong đó import zipfile41 là tên của tệp mà bạn định đọc. Để thực hiện việc này, kho lưu trữ phải được mở ở chế độ đọc hoặc nối thêm Để lấy kích thước nén của một tệp riêng lẻ từ kho lưu trữ, bạn có thể sử dụng thuộc tính import zipfile42. Tương tự, để biết dung lượng chưa nén, bạn có thể sử dụng thuộc tính import zipfile43 Đoạn mã sau sử dụng các thuộc tính và phương thức mà chúng ta vừa thảo luận để chỉ trích xuất những tệp có kích thước dưới 1MB ________9____10_______ 2 3 39 4 with zipfile.ZipFile('C:\\Stories\\Fantasy\\jungle.zip', 'w') as jungle_zip:1 import zipfile5 with zipfile.ZipFile('C:\\Stories\\Fantasy\\jungle.zip', 'w') as jungle_zip:3 import zipfile6_______14_______5 Để biết ngày giờ một tệp cụ thể từ kho lưu trữ được sửa đổi lần cuối, bạn có thể sử dụng thuộc tính import zipfile44. Điều này sẽ trả về một bộ gồm sáu giá trị. Các giá trị sẽ là năm, tháng, ngày trong tháng, giờ, phút và giây theo thứ tự cụ thể đó. Năm sẽ luôn lớn hơn hoặc bằng năm 1980 và giờ, phút và giây là số không 1 import zipfile 2 3 39 4 42 import zipfile5 import zipfile6 45_______10_______8 47 import zipfile9 49 Thông tin này về kích thước tệp gốc và kích thước tệp nén có thể giúp bạn quyết định xem có nên nén tệp hay không. Tôi chắc chắn rằng nó cũng có thể được sử dụng trong một số tình huống khác Đọc và ghi nội dung vào tệpChúng tôi đã có thể lấy được nhiều thông tin quan trọng về các tệp trong kho lưu trữ của mình bằng cách sử dụng các đối tượng import zipfile39 của chúng. Bây giờ, đã đến lúc tiến thêm một bước và lấy nội dung thực tế của các tệp đó. Tôi đã lấy một số tệp văn bản từ trang web Project Gutenberg và tạo một kho lưu trữ với chúng. Bây giờ chúng ta sẽ đọc nội dung của một trong các tệp trong kho lưu trữ bằng cách sử dụng hàm import zipfile46. Nó sẽ trả về các byte của tệp đã cho miễn là kho lưu trữ chứa tệp được mở để đọc. Đây là một ví dụ 1 import zipfile 2 3 4 jungle_zip.write('C:\\Stories\\Fantasy\\jungle.pdf', compress_type=zipfile.ZIP_DEFLATED)5 import zipfile5 jungle_zip.write('C:\\Stories\\Fantasy\\jungle.pdf', compress_type=zipfile.ZIP_DEFLATED)7 import zipfile6 jungle_zip.write('C:\\Stories\\Fantasy\\jungle.pdf', compress_type=zipfile.ZIP_DEFLATED)9 import zipfile8 11 import zipfile9 13 21 15 23 17 25 26 import os0 import os1 import os2 import os3 import os4 import os5 import os6 import os7 import os8 import os9 import zipfile00 import zipfile01 import zipfile02 import zipfile03 import zipfile04 import os2 Như bạn có thể thấy, hàm import zipfile46 trả về một đối tượng bytes với tất cả nội dung của tệp mà chúng ta đang đọc. Bạn có thể thực hiện nhiều thao tác trên nội dung của tệp, chẳng hạn như tìm vị trí của bất kỳ chuỗi con nào từ một trong hai đầu của dữ liệu hoặc thực hiện thay thế thường xuyên như chúng tôi đã làm ở trên. Trong ví dụ của chúng tôi, chúng tôi đang thực hiện tất cả các hoạt động của mình với các chuỗi byte đơn giản vì chúng tôi đang đọc các tệp văn bản Trong mô-đun cũng có một hàm import zipfile29, nhưng nó được sử dụng để ghi các tệp vào kho lưu trữ và không tự ghi nội dung vào các tệp đó. Một cách để ghi nội dung vào các tệp cụ thể là mở chúng ở chế độ ghi bằng cách sử dụng hàm import zipfile49 rồi sử dụng import zipfile29 để thêm nội dung vào các tệp đó ________9____10_______ 2 3 import zipfile10 4 import zipfile12 import zipfile5 import zipfile14 import zipfile6 import zipfile16 import zipfile8 import zipfile18 import zipfile9 import zipfile20 21 import zipfile22 Đoạn mã trên sẽ tạo 100 tệp văn bản với 100 bội số đầu tiên của các số đó được lưu trữ trong mỗi tệp. Chúng tôi chuyển đổi chuỗi của mình thành import zipfile51 vì import zipfile29 mong đợi một đối tượng giống như byte thay vì một chuỗi thông thường Suy nghĩ cuối cùngNhư có thể thấy rõ từ hướng dẫn này, việc sử dụng mô-đun import zipfile34 để nén tệp mang lại cho bạn rất nhiều sự linh hoạt. Bạn có thể nén các tệp khác nhau trong một thư mục vào các kho lưu trữ khác nhau dựa trên loại, tên hoặc kích thước của chúng. Bạn cũng có thể quyết định xem bạn có muốn giữ nguyên cấu trúc thư mục hay không. Tương tự, trong khi giải nén các tệp, bạn có thể giải nén chúng đến vị trí bạn muốn, dựa trên các tiêu chí của riêng bạn như kích thước, v.v. Thành thật mà nói, tôi cũng khá thú vị khi nén và giải nén các tệp bằng cách viết mã của riêng mình. Tôi hy vọng bạn thích hướng dẫn này và nếu bạn có bất kỳ câu hỏi nào, vui lòng cho tôi biết trên diễn đàn Envato Học PythonTìm hiểu Python với hướng dẫn hướng dẫn Python hoàn chỉnh của chúng tôi, cho dù bạn mới bắt đầu hay bạn là một lập trình viên dày dặn đang tìm cách học các kỹ năng mới Làm cách nào để gzip một tệp trong Python?Để nén một tệp hiện có vào kho lưu trữ gzip, hãy đọc văn bản trong đó và chuyển đổi nó thành một mảng phụ . Đối tượng bytearray này sau đó được ghi vào tệp gzip. Trong ví dụ dưới đây, 'zen. txt' được cho là có trong thư mục hiện tại.
Tôi có thể giảm kích thước tệp bằng zip không?Bạn có thể nén hoặc nén tệp trong Windows, thao tác này sẽ thu nhỏ kích thước của tệp nhưng vẫn giữ được chất lượng ban đầu của bản trình bày . Bạn cũng có thể nén các tệp phương tiện trong bản trình bày để chúng có kích thước tệp nhỏ hơn và dễ gửi hơn.
Làm thế nào để gzip một tập tin?Cách cơ bản nhất để sử dụng gzip để nén tệp là gõ. . % gzip tên tệp. . % gzip -d tên tệp. gz hoặc % tên tệp gunzip. gz. . % tar -cvf lưu trữ. tar foo bar dir/. % tar -xvf lưu trữ. hắc ín. . % tar -tvf lưu trữ. hắc ín. . % tar -czvf kho lưu trữ. hắc ín. gz file1 file2 dir/. % tar -xzvf kho lưu trữ. hắc ín. gz. . % tar -tzvf kho lưu trữ. hắc ín. gz Sự khác biệt giữa gzip và zip là gì?Zip có thể nén nhiều tệp và thậm chí toàn bộ hệ thống phân cấp thư mục. gzip, mặt khác, chỉ nén một tệp duy nhất . Đó là lý do tại sao chúng tôi thường sử dụng nó với tar, đóng gói nhiều tệp/thư mục vào một tệp lưu trữ duy nhất. |