• 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:UserskkkDesktopxxx.ipa'
        ipa_checker(ipa_path)

    哦了。

  • 相关阅读:
    关于动态库 DLL同名或者重名的问题总结
    UMDH使用步骤
    点是否在多边形内
    TOMCAT 显示 Context [/zhgsServer] startup failed due to previous errors
    删除 windows 服务中某条记录
    SQL SERVER 分页查询
    SQL Server中 ldf 文件过大的解决方法
    远程关机和远程重启
    把HBITMAP 保存图片文件.
    哲学与算法——高斯混合模型算法
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/9732605.html
Copyright © 2020-2023  润新知