/ / Cách nén và giải nén tệp bằng Python

Cách nén và giải nén tệp bằng Python

Different file types and their

Nén là một cách đơn giản để nén nhiều tệp và kết hợp chúng thành một tệp duy nhất. Điều này không chỉ tiết kiệm không gian lưu trữ mà còn cả băng thông khi truyền tệp qua mạng. Một trong những tính năng tốt nhất của zip là nó hoạt động trên tất cả các nền tảng chính: Windows, Linux và Mac.


Zip sử dụng nén không mất dữ liệu để nó giữ lại tất cả dữ liệu khi nén và giải nén. Bạn cũng có thể mã hóa và giải mã các tệp zip của mình.

Với rất nhiều tính năng để khám phá, hãy khám phá cách bạn có thể đọc, nén và giải nén tệp bằng mô-đun zipfile của Python.


Mô-đun zipfile là gì?

Bạn có thể sử dụng mô-đun zipfile tiêu chuẩn để thao tác với các tệp zip bằng Python. Với mô-đun này, bạn có thể mở và đọc các tệp zip, đọc siêu dữ liệu của chúng, tạo tệp zip, nén và giải nén tệp. Có ba phương pháp nén: Deflate, Bzip2 và LZMA.

Một trong những điều mà mô-đun thiếu là khả năng xử lý các tệp đa đĩa, nhưng nó xử lý phần mở rộng ZIP64. Nó cũng có thể giải mã các kho lưu trữ zip nhưng không mã hóa chúng. Sử dụng mô-đun zipfile, bạn có thể lấy siêu dữ liệu của tệp zip, chẳng hạn như ngày và thời gian sửa đổi. Bạn cũng có thể tìm nạp các chi tiết như hệ điều hành được sử dụng để tạo tệp, phiên bản zip và kích thước tệp ở cả định dạng nén và không nén.

Cách nén tệp bằng Python

Bạn có thể nén nhiều tệp vào một kho lưu trữ bằng mô-đun zipfile của Python. Nhập khẩu Tệp Zip mô-đun từ zipfile gói để thực hiện các hoạt động zip cần thiết. Cũng nhập khẩu hệ điều hành mô-đun để chọn và lưu tệp.

Xác định một chức năng get_all_file_paths(). Nó sẽ chấp nhận một tham số thư mục chứa đường dẫn đến thư mục chứa các tệp cần nén.

Khởi tạo một danh sách trống sẽ lưu trữ danh sách đường dẫn tệp. Sử dụng vòng lặp for để lấy toàn bộ nội dung của thư mục đích bằng lệnh os.walk() chức năng. Hàm này tìm nạp tên tệp trong cây thư mục bằng cách di chuyển dọc theo nó theo cách tiếp cận từ trên xuống hoặc từ dưới lên. Đối với mỗi thư mục, hàm trả về ba bộ chứa thư mục gốc, thư mục và tệp.

Gốc là một chuỗi chứa đường dẫn đầy đủ đến thư mục. Danh sách thư mục bao gồm tất cả các thư mục con có trong thư mục. Danh sách tệp chứa tất cả các tệp có trong thư mục.

Bên trong vòng lặp, khai báo một vòng lặp khác để lặp qua danh sách tệp. Sử dụng os.path.join() chức năng kết hợp tên của thư mục với mỗi tên tệp để tạo thành một đường dẫn hoàn chỉnh. Sau đó, nối tên tệp hoàn chỉnh này vào danh sách bạn đã tạo trước đó. Khi thao tác này kết thúc, hãy trả về danh sách đường dẫn tệp.

 
from zipfile import ZipFile
import os


def get_all_file_paths(directory):
    
    file_paths = []

    
    for root, directories, files in os.walk(directory):
        for filename in files:
            
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)

    
    return file_paths

Lưu trữ đường dẫn đến thư mục chứa các tệp mà bạn muốn nén trong một biến có tên là thư mục. Gọi hàm, get_all_file_paths() mà bạn đã tạo trước đó và lưu trữ giá trị mà nó trả về file_paths.

Hiển thị thông báo cho người dùng để cho họ biết rằng đây là các tệp mà chương trình sẽ nén. Lặp lại các tệp và hiển thị tên của chúng.

Chuyển tên mà bạn muốn tệp zip của mình có cùng với thông số kỹ thuật mà chương trình trả về tệp có thể ghi bằng cách sử dụng câu lệnh with để xử lý các trường hợp ngoại lệ. Lặp lại từng tệp và sử dụng hàm write() trên tệp có thể ghi thành tệp zip.

Khi hoạt động hoàn tất, xuất ra thông báo giải thích rằng chương trình đã nén tất cả các tệp thành công.

 
directory = './pythonzip'


file_paths = get_all_file_paths(directory)


print('List of files that will be zipped:')

for file_name in file_paths:
    print(file_name)


with ZipFile('my_file.zip', 'w') as zip:
    
    for file in file_paths:
        zip.write(file)

print('All files are zipped!')

Cách giải nén tệp bằng Python

Việc triển khai giải nén tệp bằng mô-đun zipfile dễ dàng hơn rất nhiều. Nhập khẩu zipfile gói từ Tệp Zip module và lưu trữ tên của tệp zip bạn muốn giải nén trong một biến. Sử dụng câu lệnh with để xử lý các ngoại lệ và mở tệp bạn muốn giải nén ở chế độ đọc. Sử dụng printdir() chức năng hiển thị mục lục của các tệp có trong zip.

Hiển thị thông báo tiến trình mà bạn đang giải nén các tệp và sử dụng giải nén () chức năng trích xuất nội dung của tệp zip vào thư mục làm việc hiện tại. Ngoài ra, bạn có thể bao gồm tham số đường dẫn để thay đổi đường dẫn nơi chương trình giải nén các tệp.

Hiển thị thông báo bằng cách sử dụng in tuyên bố kết thúc hoạt động.

 
from zipfile import ZipFile


file_name = "extract.zip"


with ZipFile(file_name, 'r') as zip:
    
    zip.printdir()

    
    print('Extract in progress...')
    zip.extractall()
    print('All files are extracted!')

Thông tin thêm về tệp Zip

Các tệp zip đã trở nên phổ biến và được sử dụng trong nhiều thập kỷ nay. Các trang web phổ biến như GitHub và Google Drive cho phép bạn tải xuống bộ sưu tập tệp dưới dạng kho lưu trữ zip. Chương trình zip nén một tập hợp các tệp thành một gói duy nhất. Điều này trái ngược với một công cụ như tar gói các tệp lại với nhau nhưng không nén chúng.

Nếu bạn muốn mã hóa các tệp của mình bằng thuật toán hiệu quả hơn, các tệp RAR là cách tốt nhất. RAR sử dụng thuật toán AES-128 tốt hơn thuật toán giảm phát được sử dụng bởi các tệp zip. Cuối cùng, chọn một trong đó đáp ứng tốt nhất nhu cầu của bạn.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *