python读取压缩文件(rar、zip、ARJ等等)列表的通用方法(patool)

python读取压缩文件有,针对不同格式的压缩文件有相应的python包,比如.rar、.zip格式文件,相应代码如下:

  • zip后缀文件需要zipfile模块
import zipfile
f = zipfile.ZipFile('zip后缀文件路径')
f.namelist()#获取压缩文件列表信息
  • rar后缀文件需要unrar模块
from unrar import rarfile
f=rarfile.RarFile('rar后缀文件路径')
f.namelist()#获取压缩文件列表信息

如上所示:不同压缩文件需要不同的python包,如果遇到特殊的压缩格式(比如ARJ压缩文件,目前尚未找到相应的处理模块)能不能统一处理呢,当然可以,不过需要些代码去实现,这里我们用到了patool模块,大致流程是通过该模块执行cmd命令(前提是需要安装rar及zip解压缩软件,cmd命令会获取当前系统的program命令),然后再获取输出的字符串(包含压缩文件信息及列表),在进行处理,相关代码如下:

import patoolib
def get_list(archive, verbosity=1, program=None, interactive=True):
	#改造的list_archive方法,该方法是patool提供的,按道理可以获取列表信息,但是只是在控制台中将结果进行了输出
    util.check_existing_filename(archive)
    if verbosity >= 0:
        util.log_info("Listing %s ..." % archive)
    #下述方法依照patool提供的方法进行微调输出cmd命令
    archive_cmdlist = _handle_archive_cmd(archive, 'list', verbosity=verbosity,
                                          interactive=interactive, program=program)
    if isinstance(archive_cmdlist, tuple):
        cmdlist, runkwargs = archive_cmdlist
    else:
        cmdlist, runkwargs = archive_cmdlist, {}
    #下述是重点,调用backtick进行相关压缩信息的输出,注意:涉及中文需要encoding="GBK"避免乱码,utf-8似乎不行
    res = util.backtick(cmdlist,encoding="GBK")
    #返回字符串数据需要进一步处理
    return res
#调用方法获取输出字符串
res_str=patoolib.get_list(file_path)
if __name__ == "__main__":
	 if file_list and "\r\n" in file_list:
	 	#按换行符进行切分
	     file_list = file_list.split("\r\n")
	    #根据特定字符串进行边界提取
	     list_range = [i for i, v in enumerate(file_list) if "-------------" in v]
	     if len(list_range) == 2:
	         res_list = [item.split(' ')[-1] for item in file_list[list_range[0] + 1:list_range[1]]]
	         for file in res_list:
	         #输出结果
	             print(file)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值