python 分卷压缩文件夹
时间: 2023-08-27 18:06:58 浏览: 105
可以使用 Python 标准库中的 `zipfile` 模块来实现分卷压缩文件夹。以下是一个示例代码:
```python
import zipfile
import os
def zip_folder(folder_path, output_path, chunk_size=1024*1024*100):
"""
分卷压缩文件夹
:param folder_path: 要压缩的文件夹路径
:param output_path: 压缩文件输出路径,可以为相对路径或绝对路径
:param chunk_size: 每个分卷的大小,默认为 100MB
"""
zip_file_name = os.path.basename(output_path)
zip_file_path, ext = os.path.splitext(output_path)
# 创建一个空的 zip 文件
with zipfile.ZipFile(output_path, mode='w', compression=zipfile.ZIP_DEFLATED) as zip_file:
# 遍历文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
# 将文件分卷写入到 zip 文件中
with open(file_path, 'rb') as f:
zip_info = zipfile.ZipInfo(file_path[len(folder_path):], date_time=(2021, 1, 1, 0, 0, 0))
zip_file.writestr(zip_info, f.read(), compress_type=zipfile.ZIP_DEFLATED)
# 如果当前 zip 文件大小超过了分卷大小,则创建一个新的 zip 文件
if zip_file.fp.tell() > chunk_size:
zip_file.close()
chunk_num = zip_file_name.split('.')[1]
chunk_num = int(chunk_num) + 1 if chunk_num else 1
chunk_path = f"{zip_file_path}.{chunk_num:03d}{ext}"
zip_file = zipfile.ZipFile(chunk_path, mode='w', compression=zipfile.ZIP_DEFLATED)
# 如果最后一个分卷大小不足分卷大小,则删除它
if os.path.exists(output_path) and zip_file.fp.tell() < chunk_size:
zip_file.close()
os.remove(output_path)
```
这个函数接受三个参数:要压缩的文件夹路径,压缩文件输出路径和每个分卷的大小(默认为 100MB)。函数会遍历文件夹中的所有文件和子文件夹,并将它们写入到一个或多个压缩文件中。如果压缩文件大小超过了分卷大小,则创建一个新的压缩文件。如果最后一个分卷大小不足分卷大小,则删除它。
以下是使用示例:
```python
zip_folder('/path/to/folder', '/path/to/output.zip', chunk_size=1024*1024*500)
```
这个例子将 `/path/to/folder` 文件夹压缩成多个大小为 500MB 的压缩文件,并输出到 `/path/to/output.zip.001`、`/path/to/output.zip.002` 等文件中。
阅读全文