python ftp遍历文件夹_Python FTP遍历删除文件夹 | 学步园

本文介绍如何使用Python的FTP模块递归遍历并删除FTP服务器上的文件和空文件夹。核心代码包括FTP连接、登录、删除文件、遍历文件夹等操作,通过`FileItem`类解析FTP返回的文件信息,并使用`walk`函数实现递归遍历及删除。
摘要由CSDN通过智能技术生成

转载请注明出处

总体思路是:使用递归来 遍历文件 和文件夹  遍历过程中 直接删除掉 文件 将文件夹路径添加到列表中

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)

其中FileItem用来解析 Ftp 返回的文件列表

mport wx

import re,os

from wx import MimeTypesManager

from win32com.shell import shell, shellcon

from win32con import FILE_ATTRIBUTE_NORMAL

mimeTypeManager=MimeTypesManager()

########################################################################

class FileItem:

pattern=re.compile('modify=(?P\d+);perm=(?P\w+);size=(?P\d+);type=(?P\w+);\s(?P.*)')

def __init__(self,line):

m=FileItem.pattern.search(line)

self.isdir=m.group('type')=='dir'

self.size='' if self.isdir else m.group('size')

self.time='' if self.isdir else m.group('modify')

self.fname=m.group('filename')

self.ext=os.path.splitext(self.fname)[-1]

def GetDesc(self):

desc=''

if self.isdir:

desc='文件夹'

elif self.ext:

fileType=mimeTypeManager.GetFileTypeFromExtension(self.ext)

if fileType:

desc=fileType.GetDescription()

if desc is None:

desc=''

return desc

最后运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值