2011-05-19 43 views
0

当打开并读取大于500mb的文件时,出现“内存错误”错误。 如果小于500MB它完美..使用 IM大小为我的进度条的MAXVALUEftp read()python中的内存错误

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) 

回答

0

不要使用read()方法,因为它读取整个文件转换成字符串。您应该使用os.stat()函数来获取文件元数据,该元数据返回成员st_size的统计结构。这是文件的字节大小。您不必首先阅读全部内容。

对于发送,也读入和写入块(如16kB),在一个循环中。

+0

thx Keith,它的作品很棒:) – unice 2011-05-19 07:22:05

1

所以,filein.read()实际上读取(即下载)文件,并占用你的内存。
您可以改用

self.size = self.ftp.size(self.filename) 
+0

的答复THX karmakaze,香港专业教育学院尝试你的代码,但它给了我这个错误 self.size = self.ftp.size(self.filename) 文件 “C:\ Python26 \ LIB \ ftplib.py” 5436行,大小 resp = self.sendcmd('SIZE'+文件名) 文件“C:\ Python26 \ lib \ ftplib.py”,行243,在sendcmd return self.getresp() 文件“C: \ Python26 \ lib \ ftplib.py“,第218行,在getresp raise error_perm,resp ftplib.error_perm:550文件未找到 – unice 2011-05-19 05:51:08

+0

'File not found'hmm。你是否提供了以'/'开头的绝对文件名,如果不检查ftp会话的'当前目录'。 – karmakaze 2011-05-19 07:32:33

+0

是的文件是在同一目录..我只是用open(self.filename,'rb')作为文件替换##: self.size = filein.read()##与您的代码 – unice 2011-05-19 08:59:50