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]:
4shutil.make_archive['archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip']
- Giải nén một tập tin:
5shutil.make_archive['archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip']
- Khái niệm cơ bản của mô -đun zipfile:
6 đối tượngshutil.make_archive['archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip']
- 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
shutil.make_archive['archive_shutil_base', format='zip',
root_dir='.', base_dir='dir_zip']
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:
6 đối tượngshutil.make_archive['archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip']
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
shutil.make_archive['archive_shutil_base', format='zip',
root_dir='.', base_dir='dir_zip']
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
shutil.make_archive['archive_shutil_base', format='zip',
root_dir='.', base_dir='dir_zip']
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
4.shutil.make_archive['archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip']
- SOWN.MAKE_ARCHIVE []-Hoạt động tệp cấp cao-Python 3.10.2 Tài liệu
- Tham số đầu tiên
9 là đường dẫn không có phần mở rộng của tệp zip để tạo, tham số thứ haishutil.make_archive['archive_shutil_base', format='zip', root_dir='.', base_dir='dir_zip']
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ứ bashutil.unpack_archive['archive_shutil.zip', 'dir_out']
6 là đường dẫn của thư mục.shutil.unpack_archive['archive_shutil.zip', 'dir_out']
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
8 trong thư mục hiện tại.shutil.unpack_archive['archive_shutil.zip', 'dir_out']
- 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']
0Mộ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']
1Như 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']
3Nế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']
4Trong 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']
5Ngoà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: //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']
6Sau đâ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']
7Tấ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']
8Mô -đ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']
9Lệnh thực thi với import shutil
shutil.make_archive['archive_shutil', format='zip', root_dir='dir_zip']
53
import shutil
shutil.make_archive['archive_shutil', format='zip', root_dir='dir_zip']
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']
0Tươ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