Python FTP下载错误

Python FTP下载错误,python,ftp,ftplib,Python,Ftp,Ftplib,我已经编写了一个ftp爬虫来下载特定的文件。它一直工作到找到要下载的特定文件,然后抛出以下错误: ftplib.error_perm: 550 该文件存在于我的下载文件夹中,但文件大小为0 kb。 我需要转换一些东西才能下载吗?。 我可以访问ftp手册并下载文件,没有任何问题,所以不要认为这是登录部分(除非有不同的登录方式??) 这是我的密码: import ftplib import re import os class Reader: def __init__(self):

我已经编写了一个ftp爬虫来下载特定的文件。它一直工作到找到要下载的特定文件,然后抛出以下错误:

ftplib.error_perm: 550
该文件存在于我的下载文件夹中,但文件大小为0 kb。 我需要转换一些东西才能下载吗?。 我可以访问ftp手册并下载文件,没有任何问题,所以不要认为这是登录部分(除非有不同的登录方式??)

这是我的密码:

import ftplib
import re
import os


class Reader:

def __init__(self):

    self.data = ""

def __call__(self,s):

    self.data += s + "\n"

ftp = ftplib.FTP("my_ftp_server")

ftp.login()

r = Reader()

ftp.dir(r)

def get_file_list(folder):



    r = Reader()

    ftp.dir(folder, r)

    print ("Reading folder",folder)


    global tpe
    global name
    for l in r.data.split("\n"):

        if len(l) > 0:
            vars = re.split("[ ]*", l)
            tpe = vars[2]
            name = vars[3]
        if tpe == "<DIR>":

            get_file_list( folder + "/" + name )
        else:
            print (folder + name)
        for name in folder:
            if vars[3].endswith(('501.zip','551.zip')):
                if os.path.exists('C:\\download\\' + vars[3]) == False:
                    fhandle = open(os.path.join('C:\\download\\', vars[3]), 'wb')
                    print ('Getting ' + vars[3])
                    ftp.retrbinary('RETR ' + vars[3], fhandle.write)
                    fhandle.close()
                elif os.path.exists(('C:\\download\\' + vars[3])) == True:
                    print ('File ', vars[3], ' Already Exists, Skipping Download')

print("-"*30)
print ("Fetching folders...")

get_file_list("")
导入ftplib
进口稀土
导入操作系统
课堂读取器:
定义初始化(自):
self.data=“”
定义调用(self,s):
self.data+=s+“\n”
ftp=ftplib.ftp(“我的ftp服务器”)
ftp.login()
r=读取器()
ftp.dir(r)
def get_文件列表(文件夹):
r=读取器()
ftp.dir(文件夹,r)
打印(“阅读文件夹”,文件夹)
全球热塑性弹性体
全局名称
对于r.data.split中的l(“\n”):
如果len(l)>0:
变量=重新拆分(“[]*”,l)
tpe=变量[2]
名称=变量[3]
如果tpe==“”:
获取文件列表(文件夹+“/”+名称)
其他:
打印(文件夹+名称)
对于文件夹中的名称:
如果变量[3].endswith(('501.zip','551.zip')):
如果os.path.exists('C:\\download\\\'+vars[3])==False:
fhandle=open(os.path.join('C:\\download\\',vars[3]),'wb')
打印('获取'+变量[3])
ftp.retrbinary('RETR'+vars[3],fhandle.write)
fhandle.close()
elif os.path.exists(('C:\\download\\\'+vars[3])==True:
打印('File',vars[3],'已存在,跳过下载')
打印(“-”*30)
打印(“获取文件夹…”)
获取文件列表(“”)

您的代码可能还可以

FTP错误550是由服务器端的权限问题引起的

此错误表示“未采取请求的操作”。文件不可用(例如,找不到文件,无法访问)。”,如您所知


如果您希望访问它,您应该联系系统管理员以更正文件权限。

您可能应该在
“+”
上拆分
。零宽度拆分往往不会达到您期望的效果。但是,使用“+”而不是“[]*”并没有任何区别。仍在使用ftplib.error\u perm:550本不打算解决您的问题,但我知道它也坏了。有趣的是,您可以手动输入FTP IP,访问FTP并下载您想要的任何文件。可能是复述格式吗?。我写的代码适用于.zip文件吗?