对文件进行压缩
- [1. 下载7z软件](#1. 下载7z软件)
- [2. 调用exe文件](#2. 调用exe文件)
- [3. 压缩和分卷压缩](#3. 压缩和分卷压缩)
- [4. 完整代码](#4. 完整代码)
1. 下载7z软件
从官网下载https://www.7-zip.org/软件。
2. 调用exe文件
主要是通过 subprocess 调用对应的command的命令。
python
subprocess.run(command, check=True)
其中 command 的应包含7z软件的exe文件地址以及文件大小,文件压缩前后的名字及地址。
3. 压缩和分卷压缩
其中command的示例如下
python
command = [
seven_zip_path,
'a',
'-tzip',
f'-v{volume_size}b', # 注意这里是以字节为单位
output_zip + '/output.zip',
source_dir + '\\*' # 源目录及其内容 排除目录本身
]
第一个元素:
seven_zip_path:这是7-Zip可执行文件7z.exe的路径。如果7z.exe在系统的PATH环境变量中,你可以直接使用'7z'。否则,你需要提供7z.exe的完整路径。
第二个元素:
'a':这是7-Zip的命令行选项,用于添加文件到压缩档案。
与第二个元素相接的两个元素都是和 "a" 相互使用。
- -t{Type}:设置压缩文件的类型(zip、tar、gzip、bzip2等)。例如,-tzip 表示创建ZIP格式的压缩文件,-t7z 表示创建7z格式的压缩文件。
- -m{Parameters}:设置压缩方法和参数。例如,-mx=9 表示使用最高级别的压缩。
- -p{Password}:设置压缩文件的密码。
- -r:递归子目录,即包括所有子目录中的文件。
- -v{Size}:设置分卷的大小。例如,-v10m 表示每个分卷的大小为10MB。
- -x[r[-|0]]{@listfile|!wildcard}:排除文件或目录。
- -i[r[-|0]]{@listfile|!wildcard}:包括文件或目录。
- -sdel:压缩后删除原文件,相当于剪切操作。
第五个元素:
output_zip + '/output.zip'
表示压缩档案的输出路径和文件名。这可以是一个包含路径的完整文件名。
本示例用了-v{Size},因此在压缩过程中,总文件大小超过Size时,就会调用分卷压缩,则会在文件后面加个001,002等标识。
第六个元素
source_dir + '\\*'
这是要压缩的文件的路径。可以是单个文件或文件夹。
source_dir = "C:/"
- 若是只有 source_dir,则会压缩这个文件夹及文件夹以内的文件内容。
- 若是包含了'\\*',则会只压缩文件夹以内的内容,但不会压缩文件夹本身。
文件大小标识
python
volume_size_mb = 100 # 这个表示压缩后的文件大小,以MB为单位。
volume_size = volume_size_mb * 1024 * 1024
4. 完整代码
python
source_directory = r'.\dist' # 需要压缩的文件地址
output_zip_filename = r'.\upload' # 压缩后文件存放地址
volume_size_mb = 100 # 每个分卷的大小为10MB
seven_zip_path = r'C:\Program Files\7-Zip\7z.exe' # 7-Zip的完整路径
volume_size = volume_size_mb * 1024 * 1024 # 转义文件大小
command = [
seven_zip_path,
'a', # 压缩
'-tzip', # 压缩文件格式
f'-v{volume_size}b', # 注意这里是以字节为单位
output_zip + '/output.zip',
source_dir + '\\*' # 源目录及其内容 排除目录本身
]
subprocess.run(command, check=True) # 调用命令行