高效读写大文件

时间:2016-05-04 09:26:55

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

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

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

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

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

问题:如何下载数据,并将其有效写入没有内存不足的文件? ......和/或什么是Pythonic实现这一目标的方式?

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

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

1 个答案:

答案 0 :(得分: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