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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 选择的文件不是zip/rar/ace/arj档案文件,这意味着您选择的文件不是以.zip、.rar、.ace、.arj为扩展名的压缩文件。通常情况下,这些文件类型用于打包和压缩多个文件文件夹,以便在存储和传输时占用较少的空间。 如果您的目标是解压缩这个文件,首先需要确保您选择的文件是一个有效的压缩文件。您可以通过查看文件的扩展名来验证。 如果文件扩展名是其他格式,您可能需要考虑采取其他方法来打开和查看文件。您可以尝试使用相关的软件或工具来打开该类型的文件,或者您可以尝试转换文件格式。 如果您只是打开文件,而不需要将其解压缩,那么您可以尝试使用适当的软件或工具打开该文件。您可以在互联网上搜索与该文件类型相对应的软件,并按照软件的指示进行操作。 总之,根据选择的文件不是zip/rar/ace/arj档案文件的提示,我们需要确定文件的格式,并采取适当的措施来打开、查看或处理它。 ### 回答2: 选择的文件不是zip/rar/ace/arj档案文件可能是因为文件格式不正确或者是其他类型的文件ziprar、ace和arj是常见的压缩文件格式,用于将多个文件文件压缩成一个单独的文件以节省存储空间或方便传输。如果选择的文件不是这些格式的话,可能会导致无法成功解压或打开。 要确保选择的文件zip/rar/ace/arj档案文件,可以检查文件的后缀名。zip文件的后缀名通常为.ziprar文件的后缀名通常为.rar,ace文件的后缀名通常为.ace,arj文件的后缀名通常为.arj。如果文件的后缀名与这些格式不对应,那么就不是相应类型的档案文件。 另外,如果文件是从其他地方下载或者接收的,也可能是下载过程中出现了问题或者发送方提供的文件格式有误。在这种情况下,可以尝试重新下载文件或联系发送方确认文件的正确格式。 总之,选择的文件不是zip/rar/ace/arj档案文件可能是因为文件格式不正确或者是其他类型的文件。要正确选择和使用这些档案文件,需要确保文件的后缀名和实际格式相符,并且遵循正确的下载和接收方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值