用 Python 实现批量压缩成 .rar 或 .zip 文件

您所在的位置:网站首页 如何把文件压缩成几个文件 用 Python 实现批量压缩成 .rar 或 .zip 文件

用 Python 实现批量压缩成 .rar 或 .zip 文件

2024-03-23 16:43| 来源: 网络整理| 查看: 265

前言

.rar 和 .zip 是两种常见的压缩文件格式,.rar 压缩率比zip高,但速度慢,随机访问的速度慢。.zip 可以通过第三方库 zipfile 来进行压缩和解压;.rar 可以通过第三方库 unrar 中的 rarfile 来进行解压(参考),但是笔者目前没有找到可以方便地将批量文件/文件夹压缩成 .rar 格式的工具。

直到看到博文 Python实现加密压缩成RAR或ZIP文件 中提供的思路:直接用 Python 调用 Windows 系统下的 CMD 命令进行压缩。

CMD命令参数

调用压缩成 .rar 的 CMD 命令为:

C:/"Program Files"/WinRAR/WinRAR.exe a D:/test/data.rar D:/test/data.txt C:/"Program Files"/WinRAR/WinRAR.exe a D:/test/folder.rar D:/test/folder

命令参数解释:

第一个参数为 WinRAR 软件的安装路径,(需要在电脑上安装 WinRAR)第二个参数a表示添加压缩,第三个参数为压缩文件的输出路径及其压缩的文件名,第四个参数为待压缩的文件路径,如果是单个文件需要具体到文件名,如果是文件夹下所有文件,只需到当前文件夹路径。

—— NOTE:如果任意一个路径名中含有空格,一定要用引号引起来,否则会报错!!为了保险起见,建议第一、三和四个参数统统通用引号引起来:

"C:/Program Files/WinRAR/WinRAR.exe" a "D:/test/data.rar" "D:/test/data.txt" "C:/Program Files/WinRAR/WinRAR.exe" a "D:/test/folder.rar" "D:/test/folder"

—— NOTE:如果需要压缩成 .zip 格式,只需要修改输出文件的后缀名即可。

待压缩文件路径的级别

第四个参数——待压缩的文件路径从哪一级目录开始,压缩包就从哪一级目录开始。

举个例子,现在我的 D:\中存在一个文件夹 test,目录结构如下:

D:\ |_test\ |_data.txt |_folder\ |_data1.txt |_data2.txt |_subfolder\ |_data3.txt |_data4.txt

情形1:输入完整的路径

当我想压缩文件夹 folder\ 时,执行命令:

"C:/Program Files/WinRAR/WinRAR.exe" a "D:/test/folder.rar" "D:/test/folder"

生成的 folder.rar 目录结构如下:

folder.rar\ |_test\ |_folder\ |_data1.txt |_data2.txt |_subfolder\ |_data3.txt |_data4.txt

我们实际想压缩的是文件夹 folder,压缩的结果是从系统盘 D:\下的 test\ 开始(不过test\下的其它文件不会被压缩进去,如上面的data.txt)。

同理,当我只想压缩 subfolder\ 时,若执行如下命令:

"C:/Program Files/WinRAR/WinRAR.exe" a "D:/test/folder/subfolder.rar" "D:/test/folder/subfolder"

生成的 subfolder.rar 目录结构如下:

subfolder.rar\ |_test\ |_folder\ |_subfolder\ |_data3.txt |_data4.txt

情形2:只输入需要压缩的文件/文件夹名

如果不想要多余的上级目录,可以将CMD命令行的当前工作路径切换到该文件/文件夹所在的目录。

示例如下,当我想压缩文件夹 folder\ 时,执行命令:

cd "D:/test/" "C:/Program Files/WinRAR/WinRAR.exe" a "folder.rar" "folder"

生成的 folder.rar 目录结构如下:

folder.rar\ |_folder\ |_data1.txt |_data2.txt |_subfolder\ |_data3.txt |_data4.txt

同理,当我只想压缩 subfolder\ 时,若执行如下命令:

cd "D:/test/folder/" "C:/Program Files/WinRAR/WinRAR.exe" a "subfolder.rar" "subfolder"

生成的 subfolder.rar 目录结构如下:

subfolder.rar\ |_subfolder\ |_data3.txt |_data4.txt Python 调用CMD命令

弄清楚 CMD 命令后,例用 Python 进行实现就很容易了,实现方式为:os.system。

具体实现代码如下:

import os def compress(input_file, output_file, root_path, rar_path='C:/"Program Files"/WinRAR/WinRAR.exe'): """ 调用CMD命令压缩文件/文件夹 Parameters ---------- input_file : 需要压缩的文件/文件夹名。从哪一级目录开始,就会从哪一级开始压缩; output_file : 压缩文件的输出路径及其压缩的文件名; 可以是.rar, .zip; root_path: input_file 所在目录; rar_path : WinRAR软件的安装路径, The default is 'C:/"Program Files"/WinRAR/WinRAR.exe'. NOTE: 路径和文件名中带空格的时候一定要多加一重引号!! """ cmd_command = r'%s a %s %s' % (rar_path, output_file, input_file) os.chdir(root_path) # 切换工作目录 os.system(cmd_command) if os.system(cmd_command)==0: print('Successful backup to', output_file) else: print('Backup FAILED', input_file) Python实现自动批量压缩

现在我的需求是:在 root_path 目录下有大量的文件/文件夹,需要逐个对其进行压缩成 .rar 格式。

实现如下:

root_path = "D:/test/folder/" lists = os.listdir(root_path) for fp in lists: input_file = '"' + fp + '"' #待压缩的文件路径及文件,多加一重引号 output_file = '"' + fp + '.rar"' #压缩文件的输出路径及文件名,多加一重引号 compress(input_file, output_file, root_path)

大功告成!

参考阅读 Python实现加密压缩成RAR或ZIP文件 (好文,非常感谢)python文件rar, zip,tar, gz压缩,解压缩文件 (参考使用其中的make_targz()方法时出现问题)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3