当前位置: 首页 > news >正文

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

[本文出自天外归云的博客园]

给你个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)

哦了。

相关文章:

  • 2018 php 面试
  • 【网络文摘】一位36岁程序员的困惑
  • rabbitMQ 常用命令
  • Benefits of encapsulation
  • 【附node操作实例】redis简明入门系列—字符串类型
  • [译] 尤雨溪:Vue 3.0 计划
  • 接口使用
  • java中如何模拟真正的同时并发请求?
  • P3807 【模板】卢卡斯定理
  • windows server 2003 安全加固(一)
  • 算法-图和图算法
  • Totuial 01 java
  • Spring Vault 2.1 正式发布
  • 聊聊storm client的nimbus.seeds参数
  • 深入源码分析Java线程池的实现原理
  • fetch 从初识到应用
  • node入门
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring Boot快速入门(一):Hello Spring Boot
  • vuex 学习笔记 01
  • vue--为什么data属性必须是一个函数
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 测试开发系类之接口自动化测试
  • 程序员该如何有效的找工作?
  • 前端技术周刊 2019-01-14:客户端存储
  • 十年未变!安全,谁之责?(下)
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 国内开源镜像站点
  • #pragma预处理命令
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (k8s中)docker netty OOM问题记录
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)fiber的基本认识
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)mysql使用Navicat 导出和导入数据库
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET6实现破解Modbus poll点表配置文件
  • .Net小白的大学四年,内含面经
  • .NET中使用Redis (二)
  • .pyc文件是什么?
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [BT]BUUCTF刷题第4天(3.22)
  • [CLR via C#]11. 事件
  • [CTO札记]盛大文学公司名称对联
  • [c语言]小课堂 day2
  • [Git].gitignore失效的原因
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [leetcode] 3Sum