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)
哦了。
Python3将ipa包中的文件按大小排序的更多相关文章
- 教你如何获取ipa包中的开发文件
教你如何获取ipa包中的开发文件 1. 从iTunes获取到ipa包 2. 修改ipa包然后获取里面的开发文件
- java读取jar包中的文件
随手写了一个java小工具,maven打包成功后,发现工具总是读不到打在jar包中的文件信息,要读取的文件位于 /src/main/resources 目录下,打包成功后,文件就在jar包中根目录下, ...
- 使用命令动态更新JAR包中的文件
动态更新JAR包中的文件,经本人实际测试可正常执行! 一.查询jar包中要替换的文件位置 jar -tvf gateway.jar | grep topjui.config.js 二.在当前 ...
- 在swt中获取jar包中的文件 uri is not hierarchical
uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...
- rpm2cpio---如何不安装但是获取rpm包中的文件
如何不安装但是获取rpm包中的文件 使用工具rpm2cpio和cpio rpm2cpio xxx.rpm | cpio -idmv 参数i表示提取文件.v表示指示执行进程,d和make-directo ...
- jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件
虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能.但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新 ...
- 『学了就忘』Linux软件包管理 — 44、在RPM包中提取文件
目录 1.RPM包中文件的提取 2.在RPM包中提取文件的操作 (1)cpio命令介绍 (2)提取RPM包中文件 1.RPM包中文件的提取 为什么要做这个事呢? 在操作Linux系统的时候误删除一个文 ...
- linux 文件&文件夹大小排序
按照当前文件夹的文件大小排序: ls -l | sort -k 5 -n -r 其中 sort 的几个参数: -k 5: 表示使用第五列字段排序, 当需要按照多个字段排序时, 可使用多个 -k 参数, ...
- tar 只解压tar包中某个文件
sh-4.1# ls test.tar sh-4.1# tar -tf test.tar ./ecs20161207.png ./ecs.png ./ecs.xml ./rds.png ./Scree ...
随机推荐
- Redis自学笔记:3.4入门-列表类型
3.4列表类型 3.4.1介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者 获得列表的某一片段. 优点:内部使用的是双向链表,所以向列表两端添加元素的时间复杂度为O(1 ...
- 数据仓库分层ODS DW DM 主题 标签
数据仓库知识之ODS/DW/DM - xingchaojun的专栏 - CSDN博客 数据仓库为什么要分层 - 晨柳溪 - 博客园 数据仓库的架构与设计 - Trigl的博客 - CSDN博客 数据仓 ...
- linux修改文件为可执行文件
修改shell为可执行文件 chmod +x test2.sh chmod 751 file 给file的属主分配读.写.执行(7)的权限,给file的所在组分配读.执行(5)的权限,给其他用户分 ...
- 阿里云EDAS在本地CentOS7.5 系统搭建测试环境,部署配置中心以及部署多个war包
参考阿里云的EDAS开发文档: 使用 Ali-Tomcat 开发应用 我们自己在内网搭建CentOS7 的测试环境,需要的资源如下: Ali-Tomcat Pandora 容器 EDAS 配置中心安装 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习4
#include <iostream>#include <string>using namespace std;int main(){ string fname; string ...
- Egret 项目文件夹配置和基本容器、动画
Egret 项目文件夹配置和基本容器.动画: class Main extends egret.DisplayObjectContainer { //src是resource codede 缩写,所有 ...
- HashMap源码分析和应用实例的介绍
1.HashMap介绍 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射.HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io.S ...
- HDU 5985 Lucky Coins 数学
Lucky Coins 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5985 Description Bob has collected a lot ...
- Mac Mysql 修改初始化密码
第一步: 点击系统偏好设置->最下边点MySQL,在弹出页面中,关闭服务 第二步:进入终端输入:cd /usr/local/mysql/bin/回车后 登录管理员权限 sudo su回车后输入以 ...
- Linux配置防火墙,开启80端口、3306端口
Linux配置防火墙,开启80端口.3306端口 起因是因为想使用Navicat连接一下数据库,发现连接不上 通过查阅许多资料和多次测试发现是因为防火墙没有配置3306端口 话不多说,开整,同理, ...