Python删除Delphi临时文件的小脚本

时间:2022-12-24 08:50:40

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