zoukankan      html  css  js  c++  java
  • 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:])

  • 相关阅读:
    PHP编程基础学习(一)——数据类型
    6-6 带头结点的链式表操作集(20 分)
    6-5 链式表操作集(20 分)
    6-4 链式表的按序号查找(10 分)
    6-3 求链式表的表长(10 分)
    6-2 顺序表操作集(20 分)
    6-1 单链表逆转(20 分)
    学生成绩管理系统(六):项目总结
    学生成绩管理系统(五):系统的完善与数据库的链接
    学生成绩管理系统(四)
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7098816.html
Copyright © 2011-2022 走看看