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

Posted 目前在腾讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(fFile 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 = rC:UserskkkDesktopxxx.ipa
    ipa_checker(ipa_path)

哦了。

以上是关于Python3将ipa包中的文件按大小排序的主要内容,如果未能解决你的问题,请参考以下文章

Mac 如何导出ipa文件中Assets.car包中的切图

无法在 Xcode 中分发我的 iOS 版 Flutter 应用程序 - “包中的 ipa 包含无效字符”

JavaScript数字数组怎么按数字大小排序?

JavaScript数字数组怎么按数子大小排序

c语言中如何将按结构体中的某个元素大小,将结构体排序输出

scrapy按顺序启动多个爬虫代码片段(python3)