【问题标题】:Efficiently read and write large file高效读写大文件
【发布时间】:2016-05-04 09:26:54
【问题描述】:

我有一个简单的程序,它从网站读取数据,然后使用 urllib 将其写入文件。但是该文件的大小是 几百兆字节,并且 Python 不断引发 Out of Memory Error

import urllib
content = urllib.urlopen ( LINK )
f = file ("Something.mp4", "wb")
f.write ( content.read () )

然后当我下载并写入文件时,它会引发内存错误。 我正在考虑将 content 分解成块并写入每个单独的块,但我只知道如何逐行读取文件而不是逐块读取。

更新:更好的是,有没有一种方法可以让我从服务器读取数据块,写入数据,然后在 X 处开始下载?因为我认为内存错误来自urllib文件实例的返回数据!

问题:如何下载数据,并将其高效地写入文件而不会出现内存不足? ...和/或实现此目的的 Pythonic 方式是什么?

奖励:如何找到我的系统可以处理的实际内存限制/参数? 示例:由于我有 4 Gigs 的 RAM,这是否意味着我可以使用 4 Gigs 的内存? ...超过一定的内存使用量后,Python 会在什么/什么时候切断我的信息?

规格: Windows 8、64 位、4GB RAM、1.3 GHZ CPU。 Python 2.7

【问题讨论】:

    标签: python-2.7 youtube web-scraping out-of-memory urllib


    【解决方案1】:

    尝试使用请求以块的形式下载文件

    filename="something.mp4"
    r = requests.get(LINK, stream=True)
    with open(local_filename, 'wb') as f:
      for block in r.iter_content(block_size=1024): 
         if block:
            f.write(block)
    

    参考http://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow

    【讨论】:

    • 这太棒了!正是我需要的,而且效果很好!谢谢! :)
    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2014-03-28
    • 2012-08-09
    • 1970-01-01
    • 2019-08-02
    • 2012-08-14
    相关资源
    最近更新 更多