转载请注明出处
http://blog.csdn.net/xugangjava/article/details/7401906
总体思路是:使用递归来 遍历文件 和文件夹 遍历过程中 直接删除掉 文件 将文件夹路径添加到列表中
yield 操作是在 for 递归遍历子文件夹 之后 所以先返回的是子文件夹
这时返回的文件夹肯定是空文件夹 ,使用rm命令就可以直接删除掉文件夹了
下面是核心代码
# -*- coding:gbk -*- # Author: 许刚 # Created: 2012/3/28 import sitecustomize import thread from wx import _misc from ftplib import FTP import wx,os,uuid,socket,sys,time,re from twisted.python import log import wx.lib.agw.ultimatelistctrl as ULC from msgbox import * from db import Cfg from win32com.shell import shell, shellcon from win32con import FILE_ATTRIBUTE_NORMAL from base import PanelWarpCtrl,FileItem,FileImageList ######################################################################## class FtpHandler(FTP): """ftp uploader handler""" #blocksize=65536 def connect(self): return self.login(Cfg.c_name,Cfg.c_pwd) def login(self,name,pwd): try: FTP.connect(self,Cfg.c_ftpurl,int(Cfg.c_ftpport)) except: log.err(sys.exc_info()) MessageBoxError('无法连接上传服务器!') return False try: FTP.login(self,name,pwd) except: log.err(sys.exc_info()) MessageBoxError('无法连接上传服务器,\n用户名或密码错误!') return False return True def delete(self, filename): '''Delete a file.''' self.sendcmd('DELE ' + filename) def mlsd(self,callback = None): self.retrlines('MLSD',callback) def listdir(self,root): items=[] self.mlsd(lambda x:items.append(FileItem(x))) return items def deletedir(self,root): def walk(root): dirs = [] def ParseLine(line): f=FileItem(line) if f.isdir: dirs.append(os.path.join(root,f.fname)) else: self.delete(f.fname) self.cwd(root) self.mlsd(ParseLine) for name in dirs: new_path = os.path.join(root, name) for x in walk(new_path):yield x yield dirs for dirs in walk(root): for d in dirs: self.rmd(d) self.rmd(root)