• 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上调试通过.

  • 相关阅读:
    一段滚动文字的js (jQuery)
    VB ASP 使用 now() 时默认格式调整方法
    解决标题过长的CSS
    javascript Spline代码
    统计学中的几个重要的分布
    网页游戏开发秘笈 PDF扫描版
    网页设计与开发——HTML、CSS、JavaScript (王津涛) pdf扫描版
    网页设计与开发:HTML、CSS、JavaScript实例教程 (郑娅峰) pdf扫描版
    网页DIV+CSS布局和动画美化全程实例 (陈益材) 随书光盘
    实用掌中宝--HTML&CSS常用标签速查手册 PDF扫描版
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/2877811.html
Copyright © 2020-2023  润新知