python中的ftp read()内存错误

python中的ftp read()内存错误,python,ftp,ftplib,Python,Ftp,Ftplib,当它打开并读取大于500mb的文件时,我收到一个错误“内存错误”。 如果小于500mb,则工作正常。。 我使用进度条最大值的大小 self.ftp = FTP(hostname) self.ftp.login(user, password) self.f = open(self.filename,'rb') with open(self.filename,'rb') as filein: self.size = filein.read()

当它打开并读取大于500mb的文件时,我收到一个错误“内存错误”。 如果小于500mb,则工作正常。。 我使用进度条最大值的大小

    self.ftp = FTP(hostname)
    self.ftp.login(user, password)
    self.f = open(self.filename,'rb')

    with open(self.filename,'rb') as filein:
        self.size = filein.read()

    self.size = len(self.size)
因此,filein.read()实际上读取(即下载)文件并消耗您的内存。
您可以使用

self.size = self.ftp.size(self.filename)
不要使用
read()
方法,因为它会将整个文件读入字符串。您应该使用
os.stat()
函数获取文件元数据,该元数据返回一个stat结构,其成员为
st\u size
。这是文件的大小(以字节为单位)。你不必先通读一遍


对于发送,也可以在循环中以块(比如16kB)的形式进行读写

thx karmakaze为了回答这个问题,我尝试了你的代码,但是它给了我这个错误self.size=self.ftp.size(self.filename)文件“C:\Python26\lib\ftplib.py”,第546行,在size resp=self.sendcmd('size'+filename)文件“C:\Python26\lib\ftplib.py”,第243行,在sendcmd返回self.getresp()文件“C:\Python26\lib\ftplib.py”,第218行,在getresp raise error\u perm中,resp ftplib.error\u perm:550 File not found'File not found'hmm.您是否提供以“/”开头的绝对文件名,如果没有,请检查ftp会话的“current dir”。是的,文件位于同一目录中。。我只是用您的代码将##替换为open(self.filename,'rb'),作为filein:self.size=filein.read()