python 中的 ftp 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)
i get an error 'Memory Error' when it open and reads a file larger than 500mb.
if its less than 500mb it works perfectly..
im using the size for my progress bar's maxvalue
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因此,filein.read() 实际上读取(即下载)文件并消耗您的内存。
你可以改用
So, filein.read() actually reads (i.e. downloads) the file and is consuming your memory.
You can instead use
不要使用
read()
方法,因为它将整个文件读入字符串中。您应该使用 os.stat() 函数来获取文件元数据,该元数据返回带有成员 st_size 的 stat 结构。这是文件的大小(以字节为单位)。您不必先阅读全部内容。对于发送,还要循环读入和写出块(例如 16kB)。
Don't use the
read()
method since it reads the whole file into a string. You should use theos.stat()
function to get the the file metadata, which returns a stat structure with the memberst_size
. That's the size in bytes of the file. You don't have to read it all in first.For sending, also read in and write out in chunks (say 16kB), in a loop.