Python3将ipa包中的文件按大小排序
给你个ipa包,解压前输出包大小,解压后把里面的文件按大小排序。
代码如下:
importos importshutil importzipfile _ipa_zip_path=lambdaipa_path:ipa_path.replace('.ipa','.zip') _file_size=lambdafile_path:os.path.getsize(file_path)/1024/1024 defunzip(zip_path:str)->str: dir_path=None ifzip_path.endswith('.zip'): print(f'{zip_path}filesize:{round(_file_size(zip_path),3)}mb') zip_name=os.path.basename(zip_path) dir_name=zip_name.replace('.zip','') dir_root_path=zip_path.replace(zip_name,'') dir_path=os.path.join(dir_root_path,dir_name) ifos.path.exists(dir_path): shutil.rmtree(dir_path) os.mkdir(dir_path) zip_file=zipfile.ZipFile(zip_path) forfile_nameinzip_file.namelist(): zip_file.extract(file_name,dir_path) zip_file.close() returndir_path defrename_suffix(raw,raw_type,target)->None: ifraw.endswith(raw_type)andos.path.exists(raw): os.rename(raw,target) defwalk_files(dir_path)->list: file_dicts=[] ifos.path.exists(dir_path): forroot,dirs,filesinos.walk(dir_path,topdown=True): fornameinfiles: file_path=os.path.join(root,name) file_dict={ 'file_name':name, 'file_size':round(_file_size(file_path),8), } file_dicts.append(file_dict) returnfile_dicts defshow_files_size(dir_path=None)->None: ifdir_path: file_dicts_sorted=sorted(walk_files(dir_path), key=lambdae:(e.__getitem__('file_size'),e.__getitem__('file_name')),reverse=True) forfile_dictinfile_dicts_sorted: print(f'{file_dict["file_name"]}->{file_dict["file_size"]}mb') defipa_checker(ipa_path:str)->None: try: ipa_file_size=_file_size(ipa_path) print(f'{ipa_path}filesize:{round(ipa_file_size,3)}mb') exceptFileNotFoundErroraserror: print(f'Filenotexists->{ipa_path}') ipa_zip_path=_ipa_zip_path(ipa_path) rename_suffix(ipa_path,'.ipa',ipa_zip_path) try: dir_path=unzip(ipa_zip_path) show_files_size(dir_path) exceptOSErroraserror: print(error) if__name__=='__main__': ipa_path=r'C:\Users\kkk\Desktop\xxx.ipa' ipa_checker(ipa_path)
哦了。
补充知识:Python3将两个有序数组合并为一个有序数组
第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)
第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好)
第二种思路的排序算法与测试代码如下:
defmerge_sort(a,b): ret=[] whilelen(a)>0andlen(b)>0: ifa[0]<=b[0]: ret.append(a[0]) a.remove(a[0]) ifa[0]>=b[0]: ret.append(b[0]) b.remove(b[0]) iflen(a)==0: ret+=b iflen(b)==0: ret+=a returnret if__name__=='__main__': a=[1,3,4,6,7,78,97,190] b=[2,5,6,8,10,12,14,16,18] print(merge_sort(a,b))
反思了一下上面的过程,不应该用remove方法,因为仔细想一下remove方法可能比较耗时,不算最简单。
改进一下,改用索引元素比较法替代头位元素比较法:
defmerge_sort(a,b): ret=[] i=j=0 whilelen(a)>=i+1andlen(b)>=j+1: ifa[i]<=b[j]: ret.append(a[i]) i+=1 else: ret.append(b[j]) j+=1 iflen(a)>i: ret+=a[i:] iflen(b)>j: ret+=b[j:] returnret if__name__=='__main__': a=[1,3,4,6,7,78,97,190] b=[2,5,6,8,10,12,14,16,18] print(merge_sort(a,b))
这个基本就是最简单的方法了。
以上这篇Python3将ipa包中的文件按大小排序就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。