2011-05-19 48 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