实现细节都在代码里面, 帮助 -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. nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter

    转自:https://blog.csdn.net/licheng989/article/details/28929411 在Bean中有代码 public abstract Axe getAxe(); ...

  2. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

    This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'的意思是,这版本的 MySQL 不支持使 ...

  3. PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现

    PCB 周期计算采用 SQL函数调用.net Dll实现 (实现代码重用目的) 玩过SQL SERVER数据库经常经需要写存储过程,函数之类的,当业务逻辑过于复杂,用SQL去写简直是恶梦, 这里以PC ...

  4. thinkphp data方法

    data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法. 用法 写操作 通常情况下我们都是通过create方法或者赋值 ...

  5. [转]RDLC报表格式化format表达式

    本文转自:http://www.cnblogs.com/samlin/archive/2012/04/17/FormatDateTime.html 刚开始接触RDLC报表,觉得RDLC报表提供的格式化 ...

  6. SQLServer XXX IS NOT NULL

    SQLServer中不能使用像Java和C#中的  XXX!=null   这种用法, 使用上面的用法返回值永远是False False False 正确的用法应该是--> XXXis not ...

  7. Go中的main函数和init函数

    Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main).这两个函数在定义时不能有任何的参数和返回值.虽然一个package里面可以 ...

  8. System.DateTime.Now 24小时制。

    this.Label6.Text = "当前时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") ...

  9. 怪异的Ubuntu

    怪异的Ubuntu 简单记录ubuntu上出现并且网上不好找到甚至压根找不到解决方案的疑难杂症. lvextend扩展逻辑卷的容量不能被系统检测到 问题发生在Ubuntu 16.04系统上. 逻辑卷/ ...

  10. EF test

    LibraryEntities db = new LibraryEntities(); private void btnSelect_Click(object sender, EventArgs e) ...