IOS - 查找未使用的图片
实现细节都在代码里面, 帮助 -h.
# -*- coding: utf-8 -*-
"""
检查IOS应用图片是否使用
1. 读取有效文件: 图片(.png, .jpg), 文件(.h, .m, .xib, .c, .cpp, .json);
2. 在文件里搜索图片, 去掉后缀符和@2x, 适应字符串拼接, 舍弃最后'_''-'之后的部分;
注意: 会遗漏字符串拼接的情况, 如a_b_%zi_c_d, 须要检查之后再删除.
时间复杂度O(n^2)-find, 每一个文件查找每一个图片;
"""
__author__ = 'C.L.Wang'
import os
import sys
import getopt
# 列出目录内全部图片
def list_dictionary_images(root_dir):
names_list = []
paths_list = []
for parent, dirNames, fileNames in os.walk(root_dir):
for name in fileNames:
ext = ['.png', '.jpg']
if name.endswith(tuple(ext)):
names_list.append(name)
paths_list.append(os.path.join(parent, name))
return [paths_list, names_list]
# 列出目录内全部代码
def list_dictionary_codes(root_dir):
paths_list = []
for parent, dirNames, fileNames in os.walk(root_dir):
for name in fileNames:
ext = ['.h', '.m', '.xib', '.json', '.c', '.cpp', '.mm', '.md']
if name.endswith(tuple(ext)):
paths_list.append(os.path.join(parent, name))
return paths_list
# 在文件里查找名称
def search_name_in_file(search_name, file_name):
# 拼接字符串特例
short_name_1 = search_name[::-1].split('_', 1)
short_name_2 = search_name[::-1].split('-', 1)
if len(short_name_1) == 2:
search_name = short_name_1[1][::-1]
elif len(short_name_2) == 2:
search_name = short_name_2[1][::-1]
# 引用图像特例
search_name = '"' + search_name
file_object = open(file_name)
try:
all_the_text = file_object.read()
if all_the_text.find(search_name) > 0:
return True
else:
return False
finally:
file_object.close()
# 规范化名称
def normalize_name(raw_name):
raw_name = raw_name.replace('@2x', '')
raw_name = raw_name.replace('.png', '')
raw_name = raw_name.replace('.jpg', '')
return raw_name
# 列出文件里未出现的名称
def list_unused_names(names_dict, file_name):
for name, path in names_dict.items():
if search_name_in_file(normalize_name(name), file_name):
del names_dict[name]
return names_dict
# 查找未使用的图片
def search_unused_images(image_folder, file_folder):
[image_paths, image_names] = list_dictionary_images(image_folder)
file_paths = list_dictionary_codes(file_folder)
images_dict = dict(zip(image_names, image_paths))
for file_path in file_paths:
images_dict = list_unused_names(images_dict, file_path)
return images_dict
def main(argv):
image_dir = '' # 图片目录
code_dir = '' # 代码目录
out_put = '' # 输出文件
result = list()
try:
opts, args = getopt.getopt(argv, "hi:c:o:", ["image_dir=", "code_dir=", "out_put="])
except getopt.GetoptError:
print 'SearchUnusedImages.py -i <image_dir> -c <code_dir> -o <out_put>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'SearchUnusedImages.py -i <image_dir> -c <code_dir> -o <out_put>'
sys.exit()
elif opt in ("-i", "--image_dir"):
image_dir = arg
elif opt in ("-c", "--code_dir"):
code_dir = arg
elif opt in ("-o", "--out_put"):
out_put = arg
out_file = open(out_put, 'w')
print 'scan start.'
for name, path in search_unused_images(image_dir, code_dir).items():
result.append(path)
for sort_path in sorted(result):
print >> out_file, sort_path
print 'scan over.'
out_file.close()
if __name__ == "__main__":
main(sys.argv[1:])
IOS - 查找未使用的图片的更多相关文章
- 清理IOS项目未使用图片脚本
项目经过需求的变更,产品迭代,会经过多次的改版,有些以前不再使用的图片不一定能够及时的清理掉,这些无用的图片一方面让项目图片资源的结构更加的复杂,另一方面会导致ipa包的体积变大. 因此我们需要清理不 ...
- iOS 两种不同的图片无限轮播
代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...
- iOS关于UILabel 基本属性 背景图片 背景色
[代码] iOS关于UILabel 基本属性 背景图片 背景色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...
- ios 从网络上获取图片并在UIImageView中显示
ios 从网络上获取图片 -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIIm ...
- SQL-57 使用含有关键字exists查找未分配具体部门的员工的所有信息。
题目描述 使用含有关键字exists查找未分配具体部门的员工的所有信息.CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` ...
- sqlserver2008 R2中查找未使用过的索引
转自:http://blog.csdn.net/yangzhawen/article/details/7247393 sqlserver2008 R2中查找未使用过的索引: o.name AS 表名 ...
- centos、linux查找未挂载磁盘格式化并挂载?
centos.linux查找未挂载磁盘格式化并挂载? df -h 查看当前linux服务器硬盘: fdisk -l /dev/sda 第一块硬盘 /dev/sdb 第二块硬盘 依此类推 以/d ...
- ios 上传视频或图片
关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...
随机推荐
- Android网络连接监听
接收系统网络服务的广播接收者 public class NetStateReceiver extends BroadcastReceiver { private Handler handler; pu ...
- hihoCoder 简单计算器
数据结构的入门题,理解倒是不复杂,用两个栈就行(一个存数字一个存符号).对于我这样的弱弱没事练练编码能力还是不错的. 注意运算优先级即可.(过两天回科大了,下次再做题也不知道何时,ACM生涯两铜收场o ...
- 判断ascii码是什么的函数
function CharMode(iN){ if (iN>=48 && iN <=57) //数字 return 1; if (iN>=65 && ...
- go之数组
一.数组概念 go语言提供了数组类型的数据结构 数组是具有 [唯一类型] 的一组 [固定长度] 的数据项序列,这种类型可以是任意类型 二.数组声明 var variable_name [SIZE]va ...
- 子线程更新UI
https://www.cnblogs.com/joy99/p/6121280.html
- Android6.0以上版本获取本机蓝牙地址
Android6.0以上版本使用BluetoothAdapter.getDefaultAdapter().getAddress()是获取不到正确的蓝牙地址的,返回的值都是02:00:00:00:00: ...
- 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)
一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Co ...
- Visual Studio UI Automation 学习(三)
昨天了解到UI Automation是微软的.Net Framework框架里的4个DLL文件,可以在Visual studio里写代码时引入引用和引用命名空间.然后去写自动化代码. 今天本来是跟着一 ...
- PHP执行Mysql数据库的备份和还原
使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先查出需要备份的表的 ...
- POJ_2115_扩展欧几里德
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23673 Accepted: 6540 Descr ...