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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。