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)

哦了。

原文地址:https://www.cnblogs.com/LanTianYou/p/9732605.html

时间: 2024-12-15 23:40:47

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

NSBundle 读取资源包中的文件

访问项目中资源包里面所有资源使用方法.读取资源包descs.plist文件方法如下: NSBundle *bundle = [NSBundle mainBundle]; //创建bundle对象 NSString *path = [bundle pathForResource:@"descs" ofType:@"plist"]; //获取资源在机器安装后的系统路径 NSArray *allDescs = [NSArray arrayWithContentsofFil

查找jar包中.class文件关键字(变量名,字符串)

有时查看日志,常常会发现由框架底层打印的错误日志.要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到.比如本人最近对smartfoxserver搭建的服务器做压测的时候,发现最大等待线程数超过20就会打印错误日志,然后就一直在smartfoxserver接受请求的反编译代码里找该错误输出,花了很长时间一直没找到.然后我在想能否用inputstream来查询字符串,试验代码如下: import java.io.BufferedRead

教你如何获取ipa包中的开发文件

1. 从iTunes获取到ipa包 2. 修改ipa包然后获取里面的开发文件

jar包中File 文件找不到的异常分析与解决

源链接: http://hxraid.iteye.com/blog/483115#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看下面的代码: Java代码 //源代码1: package edu.hxraid; import java.io.*; public class Resource { public  void get

python 一个包中的文件调用另外一个包文件 实例

python不同文件夹中模块的引用调用顺序,被调用的模块中①有类的 模块.类().方法()   ②无类的:模块.方法() test包中testIm.py 调用 test1包中testIm1.py中的方法craw1()方法,输出结果: testIm.py # coding:utf-8# testIm.py位于test包中,要调用test1包中的testIm1.py中的方法craw1()方法 import sys sys.path.append('C:\\pythonwork\\test1') #加

IOS中计算文件的大小

通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{     NSFileManager* manager = [NSFileManager defaultManager];     if ([manager fileExistsAtPath:filePath]){         return [[manager attributesOfItemAtPath:filePath error:n

linux如何查看系统占用磁盘空间最大的文件及让文件按大小排序

[[email protected] web_bak]  find / -type f -size +10G在Linux下如何让文件让按大小单位为M,G等易读格式,S size大小排序. [[email protected] data]# ls -lhS方法二:#du -h * | sort -n[[email protected] data]# du -h * | sort -n当然您也可以结合管道文件夹内最大的几个文件[[email protected] data]# du -h * | s

tar只解压tar包中某个文件

如果tar包很大,而只想解压出其中某个文件.方法如下: 只想解压出Redis-1.972.tar 中的Changes文件,来查看有哪些更改. [[email protected] ~]# tar -tf Redis-1.972.tar Redis-1.972 Redis-1.972/README Redis-1.972/Changes Redis-1.972/LICENSE Redis-1.972/dist.ini Redis-1.972/META.yml Redis-1.972/MANIFES

怎样运行jar包中的文件

1. 2.编辑sysmodule.cmd文件 java -cp sysmodule.jar;classes12.jar;mysql-connector-java-5.0.3-bin.jar;jbcl.jar sysmodule.Application 新关联的mysql-connector-java-5.0.3-bin.jar;包 3.修改dbcon.properties文件修改成mySQL的 修改前: driver=oracle.jdbc.OracleDriverurl=jdbc:oracle