• 批处理-文件比较生成


    项目中在图片资源文件对比中,以前是用的手动差分,可以通过批处理进行文件的自动差分,同样还可以给自动生成的文件命名或者其他。
    以下是代码部分,可改进地方:

    1. 输入判断
    2. 输入采用文件输入方式,避免频繁的在命令中输入
    3. 输出文件log信息
    4. 错误处理
    import os
    import subprocess
    
    inp_exe = ""
    inp_a = ""
    inp_b = ""
    pic_out = ""
    
    def BmpDiff(exefile,file_a,file_b,file_c):
        '''
        You can use:subprocess.Popen((exefile + " " + file_a + " " + file_b + " " + file_c))
        But it show so many windows,you can set
        subprocess.STARTUPINFO.dwFlags = subprocess.STARTF_USESHOWWINDOW
        subprocess.STARTUPINFO.wShowWindow = subprocess.SW_HIDE
        hide all windows.
        '''
        os.popen((exefile + " " + file_a + " " + file_b + " " + file_c))
    
        
    def Cyc_Fold(Folder_In,Folder_Out):
        #遍历当前文件夹
        for i in os.listdir(Folder_In):
            if os.path.isdir(os.path.join(Folder_In,i)):
                os.mkdir(os.path.join(Folder_Out,i))
                #print(os.path.join(Folder_Out,i))
                Cyc_Fold(os.path.join(Folder_In,i),os.path.join(Folder_Out,i))
            if os.path.isfile(os.path.join(Folder_In,i)) and i.endswith(".bmp"):
                BmpDiff(inp_exe,inp_a,os.path.join(Folder_In,i),os.path.join(Folder_Out,i))
                print(os.path.join(Folder_Out,i) + "-------> ok..")
    
    print('''Read_Me:
    1. Base图像必须为单个文件
    2. 可处理单个生成和群生成
    3. 输入资源为文件夹时,输出资源一定要也是文件夹!
    ''')
    
    while not inp_exe.endswith(".exe"):
        inp_exe = input("请正确输入bmpdiff.exe文件路径:")
    while not inp_a.endswith(".bmp"):
        inp_a = input("请正确输入Base图像(A.bmp)路径:")
    inp_b = input("请输入资源图像文件夹名/文件名:")
    pic_out = input("请输入输出图像名/文件夹名:")
    
    if pic_out.endswith(".bmp") and inp_b.endswith(".bmp"):
        BmpDiff(inp_exe,inp_a,inp_b,pic_out)
    else:
        if not os.path.exists(pic_out):
            os.mkdir(pic_out)
        Cyc_Fold(inp_b,pic_out)
    
    

    对于在后台有一些列数据来说,如果知道当前文件与目标文件文件名之间的关系,那么可以直接省略掉这一步。
    一般有两种方法:

    1. 在生成之初就做好匹配
    2. 在生成以后再批量转换

    以下给出第一种方案,利用python字典,进行判断.

    import os
    import subprocess
    
    dir_csv = {}
    inp_exe = ""
    inp_a = ""
    inp_b = ""
    pic_out = ""
    
    def BmpDiff(exefile,file_a,file_b,file_c):
        os.popen(" ".join([exefile,file_a,file_b,file_c]))
    
    def Cyc_Fold(Folder_In,Folder_Out):
        #遍历当前文件夹
        for i in os.listdir(Folder_In):
            if os.path.isdir(os.path.join(Folder_In,i)):
                os.mkdir(os.path.join(Folder_Out,i))
                #print(os.path.join(Folder_Out,i))
                #文件夹的嵌套使用
                Cyc_Fold(os.path.join(Folder_In,i),os.path.join(Folder_Out,i))
            if os.path.isfile(os.path.join(Folder_In,i)) and i.endswith(".bmp"):
                if i in  dir_csv.keys():
                    BmpDiff(inp_exe,inp_a,os.path.join(Folder_In,i),os.path.join(Folder_Out,dir_csv[i]))
                    print(os.path.join(Folder_Out,i) + "-------> ok..")
                else:
                    BmpDiff(inp_exe,inp_a,os.path.join(Folder_In,i),os.path.join(Folder_Out,i))
                    print(os.path.join(Folder_Out,i) + "-------> ok..")
    
    csv_name = input("Please input csv file name:")
    file_csv = open(csv_name,"r")
    for i in file_csv:
        dir_csv[i.split(",")[0]] = i.split(",")[1]
    
    print('''Read_Me:
    1. Base图像必须为单个文件
    2. 可处理单个生成和群生成
    3. 输入资源为文件夹时,输出资源一定要也是文件夹!
    ''')
    
    while not inp_exe.endswith(".exe"):
        inp_exe = input("请正确输入bmpdiff.exe文件路径:")
    while not inp_a.endswith(".bmp"):
        inp_a = input("请正确输入Base图像(A.bmp)路径:")
    inp_b = input("请输入资源图像文件夹名/文件名:")
    pic_out = input("请输入输出图像名/文件夹名:")
    
    if pic_out.endswith(".bmp") and inp_b.endswith(".bmp"):
        BmpDiff(inp_exe,inp_a,inp_b,pic_out)
    else:
        if not os.path.exists(pic_out):
            os.mkdir(pic_out)
        Cyc_Fold(inp_b,pic_out)
    
    
  • 相关阅读:
    2018 Android面试经历总结(京东、高德、爱奇艺、美团、摩拜等) csdn_aiyang的博客 CSDN博客
    @QQ音乐Android端120万行代码,编译耗时是怎样优化的_chuhe1989的博客CSDN博客
    @Android deeplink和AppLink原理 mingfeng002 博客园
    @Android冷启动优化解析_chuhe1989的博客CSDN博客
    (3条消息) Android 面试必备 http 与 https 协议_gdutxiaoxu的博客(微信公众号 stormjun94)CSDN博客_android 面试http
    @Android面试题(32)android编译过程和安装流程_pgg_cold的博客CSDN博客
    @Android面试题集2019版(包含答案整理)_A富得流油的咸鸭蛋的博客CSDN博客
    一道有意思的面试题目
    22
    @说说卡顿问题 简书
  • 原文地址:https://www.cnblogs.com/ply616/p/5858000.html
Copyright © 2020-2023  润新知