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