Hướng dẫn shutil zip python - trò chơi zip potthon

Trong Python, bạn có thể zip và giải nén các tệp, tức là, nén các tệp vào tệp zip và trích xuất tệp zip với mô -đun zipfile.

  • Zipfile - Làm việc với Lưu trữ Zip - Python 3.10.2 Tài liệu

Ngoài ra, bạn có thể dễ dàng zip một thư mục (thư mục) và giải nén một tệp zip với

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
2 và
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
3 của mô -đun Shutil.

  • SHOWIL - Hoạt động lưu trữ - Hoạt động tệp cấp cao - Python 3.10.2 Tài liệu

Cả hai đều được bao gồm trong thư viện tiêu chuẩn, vì vậy không cần cài đặt bổ sung.

Bài viết này mô tả các nội dung sau đây.

  • ZIP Một thư mục (thư mục):
    shutil.make_archive('archive_shutil_base', format='zip',
                        root_dir='.', base_dir='dir_zip')
    
    4
  • Giải nén một tập tin:
    shutil.make_archive('archive_shutil_base', format='zip',
                        root_dir='.', base_dir='dir_zip')
    
    5
  • Khái niệm cơ bản của mô -đun zipfile:
    shutil.make_archive('archive_shutil_base', format='zip',
                        root_dir='.', base_dir='dir_zip')
    
    6 đối tượng
  • Nén các tệp riêng lẻ vào tệp zip
  • Thêm các tệp khác vào tệp zip hiện có
  • Kiểm tra danh sách các tệp trong tệp zip
  • Trích xuất các tệp riêng lẻ từ tệp zip
  • Đọc tệp trong tệp zip
  • Zip với mật khẩu (mã hóa và giải mã)

ZIP Một thư mục (thư mục): shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 4

Giải nén một tập tin:

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
5

  • Khái niệm cơ bản của mô -đun zipfile:
    shutil.make_archive('archive_shutil_base', format='zip',
                        root_dir='.', base_dir='dir_zip')
    
    6 đối tượng

Nén các tệp riêng lẻ vào tệp zip

Thêm các tệp khác vào tệp zip hiện có

dir_zip
├── dir_sub
│   └── file_sub.txt
└── file.txt

Kiểm tra danh sách các tệp trong tệp zip

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')

Trích xuất các tệp riêng lẻ từ tệp zip

Đọc tệp trong tệp zip

  • Zip với mật khẩu (mã hóa và giải mã)

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')

Bạn có thể zip một thư mục (thư mục), tức là, tạo tệp zip từ một thư mục với

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
4.

Giải nén một tập tin: shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 5

Khái niệm cơ bản của mô -đun zipfile:

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 đối tượng

  • Nén các tệp riêng lẻ vào tệp zip

Thêm các tệp khác vào tệp zip hiện có

shutil.unpack_archive('archive_shutil.zip', 'dir_out')

Kiểm tra danh sách các tệp trong tệp zip

dir_out
├── dir_sub
│   └── file_sub.txt
└── file.txt

Trích xuất các tệp riêng lẻ từ tệp zip

Đọc tệp trong tệp zip

shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt

Khái niệm cơ bản của mô -đun zipfile: shutil.make_archive('archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip') 6 đối tượng

Nén các tệp riêng lẻ vào tệp zip

  • Thêm các tệp khác vào tệp zip hiện có

Kiểm tra danh sách các tệp trong tệp zip

Trích xuất các tệp riêng lẻ từ tệp zip

Đọc tệp trong tệp zip

  • Zip với mật khẩu (mã hóa và giải mã)

Bạn có thể zip một thư mục (thư mục), tức là, tạo tệp zip từ một thư mục với

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
4.

Nén các tệp riêng lẻ vào tệp zip

Thêm các tệp khác vào tệp zip hiện có

Kiểm tra danh sách các tệp trong tệp zip

Trích xuất các tệp riêng lẻ từ tệp zip

Đọc tệp trong tệp zip

  • Zip với mật khẩu (mã hóa và giải mã)
  • Bạn có thể zip một thư mục (thư mục), tức là, tạo tệp zip từ một thư mục với
    shutil.make_archive('archive_shutil_base', format='zip',
                        root_dir='.', base_dir='dir_zip')
    
    4.
  • SOWN.MAKE_ARCHIVE ()-Hoạt động tệp cấp cao-Python 3.10.2 Tài liệu
  • Tham số đầu tiên
    shutil.make_archive('archive_shutil_base', format='zip',
                        root_dir='.', base_dir='dir_zip')
    
    9 là đường dẫn không có phần mở rộng của tệp zip để tạo, tham số thứ hai
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    0 là định dạng lưu trữ (
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    1,
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    2,
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    3,
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    4,
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    5) và tham số thứ ba
    shutil.unpack_archive('archive_shutil.zip', 'dir_out')
    
    6 là đường dẫn của thư mục.

Ví dụ, giả sử có một thư mục

shutil.unpack_archive('archive_shutil.zip', 'dir_out')
7 với cấu trúc sau trong thư mục hiện tại.

Nén thư mục này vào tệp zip

shutil.unpack_archive('archive_shutil.zip', 'dir_out')
8 trong thư mục hiện tại.

  • cpython/zipfile.py ở 3.10 · python/cpython

Phương thức

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
6 của đối tượng
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 ghi tệp có tên tham số đầu tiên
dir_out
├── dir_sub
│   └── file_sub.txt
└── file.txt
6 vào tệp zip, đặt cho nó tên lưu trữ (= name trong zip) tham số thứ hai
with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    zf.write('another_file.txt')
7. Nếu
with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    zf.write('another_file.txt')
7 bị bỏ qua,
dir_out
├── dir_sub
│   └── file_sub.txt
└── file.txt
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
with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    zf.write('another_file.txt')
7.

  • zipfile.zipfile.write () - Làm việc với tài liệu lưu trữ ZIP - Python 3.10.2 Tài liệu

import zipfile

with zipfile.ZipFile('archive_zipfile.zip', 'w',
                     compression=zipfile.ZIP_DEFLATED,
                     compresslevel=9) as zf:
    zf.write('dir_zip/file.txt', arcname='file.txt')
    zf.write('dir_zip/dir_sub/file_sub.txt', arcname='dir_sub/file_sub.txt')

Bạn cũng có thể chọn một phương thức nén và cấp độ cho mỗi tệp bằng cách chỉ định

with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    with zf.open('dir_sub/new_file.txt', 'w') as f:
        f.write(b'text in new file')
1 và
import zipfile

with zipfile.ZipFile('archive_zipfile.zip', 'w',
                     compression=zipfile.ZIP_DEFLATED,
                     compresslevel=9) as zf:
    zf.write('dir_zip/file.txt', arcname='file.txt')
    zf.write('dir_zip/dir_sub/file_sub.txt', arcname='dir_sub/file_sub.txt')
2 trong phương thức
dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
6.

Thê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

shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
9, hãy đặt tham số đầu tiên
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
4 thành đường dẫn của tệp zip hiện có và tham số thứ hai
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
5 thành
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
8 (nối).

Thêm các tập tin hiện có

Bạn có thể thêm các tệp hiện có bằng phương thức

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
6 của đối tượng
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6.

Sau đây là một ví dụ về việc thêm

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
00 trong thư mục hiện tại. Đối số
with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    zf.write('another_file.txt')
7 bị bỏ qua.

with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    zf.write('another_file.txt')

Tạo và thêm một tệp mới

Bạn cũng có thể tạo một tệp mới và thêm nó. Sử dụng phương thức

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
3 của đối tượng
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 với chế độ phụ trợ (
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
8).

  • zipfile.zipfile.open () - Làm việc với Lưu trữ Zip - Tài liệu Python 3.10.2

Chỉ định đường dẫn của tệp mới được tạo trong ZIP làm tham số đầu tiên và đặt tham số thứ hai

shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
5 thành
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
7.

Bạn có thể viết nội dung bằng phương thức

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
6 của đối tượng tệp đã mở.

with zipfile.ZipFile('archive_zipfile.zip', 'a') as zf:
    with zf.open('dir_sub/new_file.txt', 'w') as f:
        f.write(b'text in new file')

Đối số của

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
6 phải được chỉ định là
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
09, không phải
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
10. Để viết một văn bản, sử dụng
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
11 hoặc chuyển đổi nó bằng phương pháp
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
12 của
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
10.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
0

Một ví dụ về việc đọc một tệp trong zip với

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
3 của đối tượng
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 được mô tả sau.

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 đối tượng

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 với tham số đầu tiên
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
4 dưới dạng đường dẫn của tệp zip hiện có và tham số thứ hai
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
5 là
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
6 (đọc).
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
5 có thể được bỏ qua vì mặc định là
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
6.

Bạn có thể nhận được một danh sách các mục được lưu trữ với phương thức

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
22 của đối tượng
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6.

  • zipfile.zipfile.namelist () - Làm việc với tài liệu lưu trữ Zip - Python 3.10.2 Tài liệu

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
1

Như bạn có thể thấy từ kết quả ở trên, Zips được tạo bằng

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
4 cũng liệt kê các thư mục riêng lẻ. Điều tương tự cũng đúng với các zips được nén với chức năng tiêu chuẩn của công cụ tìm trên Mac.

Bạn có thể loại trừ các thư mục với sự hiểu biết danh sách.

  • Liệt kê sự hiểu biết trong Python

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
2

Để giải nén tệp zip, hãy tạo đối tượng

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 ở chế độ đọc (
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
6, mặc định).

Nếu bạn chỉ muốn trích xuất các tệp cụ thể, hãy sử dụng phương thức

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
27.

  • zipfile.zipfile.extract () - Làm việc với tài liệu lưu trữ Zip - Python 3.10.2 Tài liệu

Tham số đầu tiên

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
28 là tên của tệp được trích xuất (bao gồm thư mục trong tệp zip) và tham số thứ hai
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
29 là đường dẫn đến thư mục để trích xuất.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
3

Nếu bạn muốn trích xuất tất cả các tệp, hãy sử dụng phương thức

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
30. Chỉ định đường dẫn của thư mục để trích xuất là đối số đầu tiên
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
29.

  • zipfile.zipfile.extractall () - Làm việc với tài liệu lưu trữ Zip - Python 3.10.2 Tài liệu

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
4

Trong cả hai trường hợp, nếu

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
29 bị bỏ qua, các tệp đượ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 dường như nó tạo ra một thư mục mới ngay cả khi
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
29 không tồn tại (được xác nhận trong Python 3.9.9).

Đọc tệp trong tệp zip

Bạn có thể đọc trực tiếp các tệp trong một tệp zip.

Tạo đối tượng

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
6 ở chế độ đọc (mặc định) và mở tệp bên trong bằng phương thức
dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
3.

Đối số đầu tiên của

dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
3 là tên của một tệp trong zip (nó có thể bao gồm thư mục). Đối số thứ hai
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
5 có thể được bỏ qua vì giá trị mặc định là
shutil.unpack_archive('archive_shutil_base.zip', 'dir_out_base')
6 (đọc).

Nội dung có thể được đọc với phương thức

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
39 của đối tượng tệp đã mở. Một chuỗi byte
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
09 được trả về, có thể được chuyển đổi thành chuỗi
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
10 với phương thức
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
42.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
5

Ngoài

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
39,
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
44 và
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
45 có thể được sử dụng cũng như đối tượng tệp được mở với chức năng tích hợp
dir_out_base
└── dir_zip
    ├── dir_sub
    │   └── file_sub.txt
    └── file.txt
3.

  • 7. Đầu vào và đầu ra - Các tệp đọc và ghi - Python 3.10.2 Tài liệu

Zip với mật khẩu (mã hóa và giải mã)

Mô -đun zipfile có thể giải mã các zips bằng mật khẩu (zip được mã hóa), nhưng nó không thể mã hóa zips.

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 một tệp được mã hóa. Giải mã cực kỳ chậm vì nó được thực hiện trong Python bản địa chứ không phải C. zipfile - làm việc với tài liệu lưu trữ zip - Python 3.10.2 Tài liệu

Ngoài ra, AES không được hỗ trợ.

Mô -đun Zipfile từ Thư viện tiêu chuẩn Python chỉ hỗ trợ các tệp ZIP được mã hóa CRC32 (xem tại đây: http://hg.python.org/cpython/file/71ADF21421D9/lib/zipfile.py#l420). ZIP - Python unzip AES -128 được mã hóa tập tin - Overflow Stack Overflow

Cả

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
2 và
shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
3 đều không hỗ trợ mã hóa và giải mã.

Pyzipper

Pyzipper được giới thiệu trong Stack Overflow trên hỗ trợ mã hóa và giải mã AES, và có thể được sử dụng theo cách tương tự như Zipfile.

  • Danifus/Pyzipper: Tiện ích mở rộng Python Zipfile

Để tạo tệp zip bằng mật khẩu, chỉ định

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
49 với
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
50 và đặt mật khẩu bằng phương thức
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
51. Lưu ý rằng bạn cần chỉ định mật khẩu với chuỗi byte
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
09.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
6

Sau đây là một ví dụ về việc giải nén tệp zip bằng mật khẩu.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
7

Tất nhiên, nếu mật khẩu sai, nó không thể được giải mã.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
8

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.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
9

Lệnh thực thi với import shutil shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip') 53

Bạn cũng có thể sử dụng

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
53 nếu zipfile hoặc pyzipper không hoạt động, nhưng lệnh này có thể xử lý nó bằng mọi cách.

  • SubProcess.Run () - Quản lý quy trình phụ - Python 3.10.2 Tài liệu

Sử dụng lệnh

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
55 của 7-zip (yêu cầu cài đặt) làm ví dụ.

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
0

Tương đương với các lệnh sau.

import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
56 là mở rộng. Lưu ý rằng
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
57 và
import shutil

shutil.make_archive('archive_shutil', format='zip', root_dir='dir_zip')
58 không yêu cầu khoảng trống.

shutil.make_archive('archive_shutil_base', format='zip',
                    root_dir='.', base_dir='dir_zip')
1