如何解决在 Python 中删除 FTP 文件夹中的所有文件失败,并显示“500 Invalid command:”MLSD”“
我正在尝试使用 ftplib 和 Python 删除文件夹。
我试过 ftp.delete
,但它只接受文件
我试过 ftp.rmd
但这仅适用于空文件夹。
尝试了我在网上找到的递归函数:
def remove_ftp_dir(ftp,path):
for (name,properties) in ftp.mlsd(path=path):
if name in ['.','..']:
continue
elif properties['type'] == 'file':
ftp.delete(f"{path}/{name}")
elif properties['type'] == 'dir':
remove_ftp_dir(ftp,f"{path}/{name}")
ftp.rmd(path)
尝试迭代 ftp.mlsd
时,我得到:
ftplib.error_perm:500 无效命令:“MLSD”
解决方法
def delAllfile(ftp,ftppath):
try:
print (ftppath)
try:
ftp.cwd(ftppath)
except Exception as e:
print ("Failed to enter ftp directory" + str(e))
dir_res = []
ftp.dir('.',dir_res.append) # Dir() the current directory and put the results in the list
print(dir_res)
for i in dir_res:
if i.startswith("d"):
dirName=i.split(" ")[-1]
print("Start deleting"+dirName+"folder")
delAllfile(ftp,ftp.pwd() + "/" + dirName)
ftp.cwd('..')
print(ftppath+"/"+dirName)
ftp.rmd(ftppath + '/' + dirName)
else:
filelist = ftp.getfiles(ftppath)
for f in filelist:
print ("Delete FTP directory:"+ftppath+"File exists under:"+f)
ftp.delete(f)
except Exception as e:
raise e
,
为了将来需要这个的每个人,我写了一个删除函数,可以在每个服务器上工作:
def delete_dir (ftp,deleteDirPath):
ftp.cwd(deleteDirPath)
print("Current wd --- ",ftp.pwd())
contents =ftp.nlst(deleteDirPath)
# if empty dir - delete it
try:
ftp.rmd(deleteDirPath)
except error_perm as e:
if not e.args[0].startswith("550"):
raise
# loop on all folder objects list
for name in contents:
try:
# delete if file
print(deleteDirPath + "/" + name)
ftp.delete( deleteDirPath + "/" + name)
#time.sleep(0.7)
print("Succeed delete = ",deleteDirPath + "/" + name)
except:
# if folder
delete_dir(ftp,deleteDirPath + "/" + name)
# if empty dir - delete it
try:
ftp.rmd(deleteDirPath)
except error_perm as e:
if not e.args[0].startswith("550"):
raise
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。