DDR爱好者之家 Design By 杰米
给你个ipa包,解压前输出包大小,解压后把里面的文件按大小排序。
代码如下:
import os
import shutil
import zipfile
_ipa_zip_path = lambda ipa_path: ipa_path.replace('.ipa', '.zip')
_file_size = lambda file_path: os.path.getsize(file_path) / 1024 / 1024
def unzip(zip_path: str) -> str:
dir_path = None
if zip_path.endswith('.zip'):
print(f'{zip_path} file size:{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)
if os.path.exists(dir_path):
shutil.rmtree(dir_path)
os.mkdir(dir_path)
zip_file = zipfile.ZipFile(zip_path)
for file_name in zip_file.namelist():
zip_file.extract(file_name, dir_path)
zip_file.close()
return dir_path
def rename_suffix(raw, raw_type, target) -> None:
if raw.endswith(raw_type) and os.path.exists(raw):
os.rename(raw, target)
def walk_files(dir_path) -> list:
file_dicts = []
if os.path.exists(dir_path):
for root, dirs, files in os.walk(dir_path, topdown=True):
for name in files:
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)
return file_dicts
def show_files_size(dir_path=None) -> None:
if dir_path:
file_dicts_sorted = sorted(walk_files(dir_path),
key=lambda e: (e.__getitem__('file_size'), e.__getitem__('file_name')), reverse=True)
for file_dict in file_dicts_sorted:
print(f'{file_dict["file_name"]}->{file_dict["file_size"]}mb')
def ipa_checker(ipa_path: str) -> None:
try:
ipa_file_size = _file_size(ipa_path)
print(f'{ipa_path} file size:{round(ipa_file_size,3)}mb')
except FileNotFoundError as error:
print(f'File not exists->{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)
except OSError as error:
print(error)
if __name__ == '__main__':
ipa_path = r'C:\Users\kkk\Desktop\xxx.ipa'
ipa_checker(ipa_path)
哦了。
补充知识:Python3将两个有序数组合并为一个有序数组
第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)
第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好)
第二种思路的排序算法与测试代码如下:
def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]: ret.append(a[0]) a.remove(a[0]) if a[0] >= b[0]: ret.append(b[0]) b.remove(b[0]) if len(a) == 0: ret += b if len(b) == 0: ret += a return ret 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方法可能比较耗时,不算最简单。
改进一下,改用索引元素比较法替代头位元素比较法:
def merge_sort(a, b): ret = [] i = j = 0 while len(a) >= i + 1 and len(b) >= j + 1: if a[i] <= b[j]: ret.append(a[i]) i += 1 else: ret.append(b[j]) j += 1 if len(a) > i: ret += a[i:] if len(b) > j: ret += b[j:] return ret 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包中的文件按大小排序就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2025年11月03日
2025年11月03日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]