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

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)
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » Python使用patool通用方法读取压缩文件列表(rar、zip、ARJ等)

    发表评论