实现细节都在代码里面, 帮助 -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 - 查找未使用的图片的更多相关文章

  1. 清理IOS项目未使用图片脚本

    项目经过需求的变更,产品迭代,会经过多次的改版,有些以前不再使用的图片不一定能够及时的清理掉,这些无用的图片一方面让项目图片资源的结构更加的复杂,另一方面会导致ipa包的体积变大. 因此我们需要清理不 ...

  2. iOS 两种不同的图片无限轮播

    代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...

  3. 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 ...

  4. ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

    相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...

  5. ios 从网络上获取图片并在UIImageView中显示

    ios 从网络上获取图片   -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIIm ...

  6. SQL-57 使用含有关键字exists查找未分配具体部门的员工的所有信息。

    题目描述 使用含有关键字exists查找未分配具体部门的员工的所有信息.CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` ...

  7. sqlserver2008 R2中查找未使用过的索引

    转自:http://blog.csdn.net/yangzhawen/article/details/7247393 sqlserver2008 R2中查找未使用过的索引: o.name AS 表名 ...

  8. centos、linux查找未挂载磁盘格式化并挂载?

    centos.linux查找未挂载磁盘格式化并挂载? df -h 查看当前linux服务器硬盘: fdisk -l /dev/sda   第一块硬盘 /dev/sdb   第二块硬盘 依此类推 以/d ...

  9. ios 上传视频或图片

    关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...

随机推荐

  1. 地图使用-----MapKit介绍

    一.MapKit介绍 1.苹果自带地图功能(高德地图),可以提供地图展示,查询,定位,导航等功能.使用MapKit框架实现地图功能,MapKit框架中所有数据类型的前缀都是MK 2.MapKit有一个 ...

  2. PCB LDI文件 自动化输出(改造)实现思路

    由于工厂采用Liunxs系统输出LDI文件,由于我们数据库是用的Windows Server,编程语言是.net 无法与Liunxs系统进行有效对接, 所以造成才会造成LDI 资料输效率极低,人员工作 ...

  3. Spring Boot (9) mybatis全注解化

    ORM对比图 框架对比 Spring JDBC Spring Data Jpa Mybatis 性能 性能最好 性能最差 居中 代码量 多 少 多 学习成本 低 高 居中 推荐指数 ❤❤❤ ❤❤❤❤❤ ...

  4. My97DatePicker 动态设置有效/无效日期

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  5. Beta冲刺-星期五

    这个作业属于哪个课程  <课程的链接>            这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 完成项目最后的冲刺 ...

  6. 在64位WindowsServer2012R2中安装Oracle10g第二版(10.2.0.4.0)-20160106

      1.操作系统版本 用于安装数据库的操作系统镜像文件名为:cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso 安装DataCen ...

  7. 几段Python小程序

    程序片段1 第一个需求是需要生成一些随机的时间,例如需要随机生成从一年前到现在的一些时间,刚开始折腾了半天,最后的代码如下: from datetime import timedelta from d ...

  8. 09--c++ 类的继承与派生

    c++ 类的继承与派生   一.基本概念 1.类的继承,是新的类从已有类那里得到已有的特性.或从已有类产生新类的过程就是类的派生.原有的类称为基类或父类,产生的新类称为派生类或子类.   2.派生类的 ...

  9. (转)基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作

    http://www.cnblogs.com/wuhuacong/p/5147368.html 在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这 ...

  10. Typeclassopedia 阅读笔记:导言与 Functor

    Typeclassopedia 阅读笔记 本文是对介绍 Haskell 中类型类(type classes)的文档 Typeclassopedia 的阅读笔记和简短总结,包含此文档中重要的知识点.读者 ...