Python将rar格式转换为zip格式

刷完这60个标准库模块,成为Python骨灰级玩家

导入包

由于Windows文件管理器可以打开zip格式的压缩包,所以希望将所有的rar压缩包转成zip格式。在python中,需要导入zipfilerarfile来处理这两种压缩文件。其中,rarfile需要额外安装。

其调用方式都是一致的

import rarfile
import zipfile

zFile = zipfile.ZipFile("test.zip")
rFile = rarfile.RarFile("test.rar")
zFile.extractall()
rFile.extractall()

其中ZipFile的构造函数为

ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True)

各参数含义如下

  • file 文件路径或者文件对象
  • mode 文件打开模式,可以为r, w, a, x,表示读、写、追加、新建写入。
  • compression 压缩方案,可以是ZIP_STORED, ZIP_DEFLATED, ZIP_BZIP2ZIP_LZMA
  • allowZip64True时,若文件大于4GiB,zipfile将创建使用ZIP64扩展的ZIP文件;为False则引发异常。
  • compresslevel 为压缩等级,在ZIP_DEFLATED时可选整数0-9,在ZIP_BZIP2时可选整数1-9,其他压缩方案不可用。
  • strict_timestamps 设为False时允许压缩早于1980年以前活2108年之后的文件,但时间戳会设为1980-01-01或2107-12-31

有关ZipFIle的更详细的信息,可见Python处理zip压缩文件

RarFile的构造函数则十分简单

rarfile.RarFile(file[, mode='r'])

其中file即压缩文件,mode为打开模式,r表示读取,w表示写入。

Cannot find working tool问题

在实际操作过程中,RarFile遇到了"Cannot find working tool"问题,这是因为并没有安装rar的解压工具所致。之所以会有这么奇葩的问题,皆因rar并非开源协议,所以没法用代码复现其解压逻辑,而只能去找专门的解压exe

其解决方案也非常简单,只需安装所谓的working tool即可,下载并安装winrar后,将安装目录下的UnRAR.exe添加到工作目录。

中文乱码问题

在实际操作过程中,ZipFile遇到了中文乱码问题。

为了解决中文乱码问题,不妨看一下zipfile在读取文件名的时候都干了个啥。打开zipfile源代码,直接搜索decode,果然发现了很可疑的几行代码

if flags & 0x800:
    # UTF-8 file names extension
    filename = filename.decode('utf-8')
else:
    # Historical ZIP filename encoding
    filename = filename.decode('cp437')

所以对于中文字符,读取文件之后可以通过cp437进行encode

>>> import zipfile
>>> z = zipfile.ZipFile("test.zip")
>>> for n in z.namelist():
...     n.encode("cp437").decode("GBK")

打印结果如下


‘鲁迅卷1.txt’
‘鲁迅卷2.txt’
‘鲁迅卷3.txt’
‘鲁迅卷4.txt’
‘鲁迅卷5.txt’
‘鲁迅卷6.txt’
‘鲁迅卷7.txt’
‘鲁迅卷8.txt’


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值