python 中的 ftp read() 内存错误

发布于 2024-11-08 20:03:54 字数 311 浏览 2 评论 0原文

当我打开并读取大于 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬心 2024-11-15 20:03:54

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

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

So, filein.read() actually reads (i.e. downloads) the file and is consuming your memory.
You can instead use

self.size = self.ftp.size(self.filename)
白衬杉格子梦 2024-11-15 20:03:54

不要使用 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 the os.stat() function to get the the file metadata, which returns a stat structure with the member st_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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文