zoukankan      html  css  js  c++  java
  • Python删除Delphi临时文件的小脚本

    Delphi在编译过程中会产生很多临时文件,写了个Python脚本,用于删除这些临时文件.

    上代码:

    #-------------------------------------------------------------------------------
    # Name:        DelDelphiTempFile.py
    # Purpose:
    # 删除Delphi临时文件脚本
    # Author:      garfield
    #
    # Created:     26-01-2013
    # Copyright:   (c) garfield 2013
    # Licence:     <your licence>
    #-------------------------------------------------------------------------------
    
    #_*_ coding=utf-8 _*_
    
    import os,sys
    from stat import *
    
    #预设置临时文件的扩展名信息
    delphitempfile=['dcu','~pas','~dfm','~dsk']
    
    def ClearFile(path):
        for item in os.listdir(path):
            fname = os.path.join(path, item)
            mode = os.stat(fname).st_mode
            #如果是目录则递归调用
            if S_ISDIR(mode):
                ClearFile(fname)
            else:
                #判断文件是否在列表中
                if '.' in fname:
                    #获得文件类型
                    file_type  = fname.rsplit('.',1)[1]
                    if file_type in delphitempfile:
                        print('删除文件:%s' % (fname))
                        os.remove(fname)
    
    if __name__ == '__main__':
        #判断命令行参数
        if len(sys.argv) != 2:
            print( 'Use: %s path' % sys.argv[0])
            sys.exit(1)
        ClearFile(sys.argv[1])

    执行:

    python3 DelDelphiTempFile.py D:\MyDelphiProject

    下面再对脚本改造,可以删除Delphi产生的__history文件夹和SVN版本控制产生的.svn文件夹

    #-------------------------------------------------------------------------------
    # Name:        DelDelphiTempFile.py
    # Purpose:
    # 删除Delphi临时文件脚本
    # Author:      garfield
    #
    # Created:     26-01-2013
    # Copyright:   (c) garfield 2013
    # Licence:     <your licence>
    #-------------------------------------------------------------------------------
    #!/usr/bin/env python3
    #_*_ coding=utf-8 _*_
    
    import os,sys
    from stat import *
    
    #预设置临时文件的扩展名信息
    delphitempfile=['dcu','~pas','~dfm','~dsk']
    
    def ClearFile(path):
        for item in os.listdir(path):
            fname = os.path.join(path, item)
            mode = os.stat(fname).st_mode
            #如果是目录则递归调用
            if S_ISDIR(mode):
                #print("进入文件夹 %s " %fname)
                #删除.svn和_history
                if ((item == ".svn") or (item == "__history")):
                    print("删除文件夹: %s " %fname)
                    print("%d 已删除" % purge(fname))
                else:
                    ClearFile(fname)
            else:
                #判断文件是否在列表中
                if '.' in fname:
                    #获得文件类型
                    file_type  = fname.rsplit('.',1)[1]
                    if file_type in delphitempfile:
                        print('删除文件:%s' % (fname))
                        os.remove(fname)
    
    def purge(path):
        count = 0
        for item in os.listdir(path):
            subpath = os.path.join(path, item)
            mode = os.stat(subpath).st_mode
            if S_ISDIR(mode):
                count += purge(subpath)
            else:
                os.chmod(subpath, S_IREAD|S_IWRITE)
                os.unlink(subpath)
                count += 1
        os.rmdir(path)
        count += 1
        return count
    
    
    if __name__ == '__main__':
        #判断命令行参数
        if len(sys.argv) != 2:
            print( 'Use: %s path' % sys.argv[0])
            sys.exit(1)
        ClearFile(sys.argv[1])

    当然,除了以上使用递归方法来实现,还可以方便地使用os.walk方法来实现:

    #-------------------------------------------------------------------------------
    # Name:        DelDelphiTempFileII.py
    # Purpose:
    # 删除Delphi临时文件脚本
    # Author:      garfield
    #
    # Created:     26-01-2013
    # Copyright:   (c) garfield 2013
    # Licence:     <your licence>
    #-------------------------------------------------------------------------------
    
    '''
    os.walk:
    这个方法返回的是一个三元tupple(dirpath, dirnames, filenames),
    其中第一个为起始路径,
    第二个为起始路径下的文件夹,
    第三个是起始路径下的文件.
    dirpath是一个string,代表目录的路径,
    dirnames是一个list,包含了dirpath下所有子目录的名字,
    filenames是一个list,包含了非目录文件的名字.这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name).
    '''
    
    #!/usr/bin/env python3
    #_*_ coding=utf-8 _*_
    
    import os,sys
    from stat import *
    
    #预设置临时文件的扩展名信息
    delphitempfile=['dcu','~pas','~dfm','~dsk']
    
    def ClearFile(path):
        for t in os.walk(path):
            for fname in t[2]:
                if '.' in fname:
                    #获得文件类型
                    file_type  = fname.rsplit('.',1)[1]
                    if file_type in delphitempfile:
                        print('删除文件:%s' % (os.path.join(t[0],fname)))
                        os.remove(os.path.join(t[0],fname))
    
            for p in t[1]:
                #print("进入文件夹 %s " %fname)
                #删除.svn和_history
                if ((p == ".svn") or (p == "__history")):
                    print("删除文件夹: %s " % os.path.join(t[0],p))
                    print("%d 已删除" % purge(os.path.join(t[0],p)))
    
    def purge(path):
        count = 0
        for item in os.listdir(path):
            subpath = os.path.join(path, item)
            mode = os.stat(subpath).st_mode
            if S_ISDIR(mode):
                count += purge(subpath)
            else:
                os.chmod(subpath, S_IREAD|S_IWRITE)
                os.unlink(subpath)
                count += 1
        os.rmdir(path)
        count += 1
        return count
    
    
    if __name__ == '__main__':
        #判断命令行参数
        if len(sys.argv) != 2:
            print( 'Use: %s path' % sys.argv[0])
            sys.exit(1)
        ClearFile(sys.argv[1])

    注:以上代码均在Python3.2上调试通过.

  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/2877811.html
Copyright © 2011-2022 走看看