zoukankan      html  css  js  c++  java
  • 批处理-文件比较生成

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

    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)
    
    
  • 相关阅读:
    移动端 app
    python 3.8 新特性
    vue 路由歪招
    VUE 关于组件依赖的问题
    vue 全局注册组件
    CSS小技巧
    vue踩坑记 页面跳转不新
    vuecli eslint 语法错误解决办法
    vue v-slot用法测试
    终止 IdFtp下载
  • 原文地址:https://www.cnblogs.com/ply616/p/5858000.html
Copyright © 2011-2022 走看看