Python3将ipa包中的文件按大小排序


Posted in Python onApril 17, 2020

给你个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包中的文件按大小排序就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之缩进介绍
Aug 29 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
Python flask框架post接口调用示例
Jul 03 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
python爬虫实现获取下一页代码
Mar 13 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 #Python
pyecharts动态轨迹图的实现示例
Apr 17 #Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 #Python
Python openpyxl 插入折线图实例
Apr 17 #Python
python 画图 图例自由定义方式
Apr 17 #Python
关于python 的legend图例,参数使用说明
Apr 17 #Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 #Python
You might like
计算一段日期内的周末天数的php代码(星期六,星期日总和)
2009/11/12 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
Python实现快速多线程ping的方法
2015/07/15 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python读写配置文件操作示例
2019/07/03 Python
Python用input输入列表的实例代码
2020/02/07 Python
Django之腾讯云短信的实现
2020/06/12 Python
python 怎样进行内存管理
2020/11/10 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
新农村建设典型材料
2014/05/31 职场文书
2015年药店工作总结
2015/04/20 职场文书
教师创先争优承诺书
2015/04/27 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
python神经网络Xception模型
2022/05/06 Python
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript