Python FTP遍历删除文件夹

转载请注明出处

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)

 

发表评论

邮箱地址不会被公开。 必填项已用*标注