我有一个简单的程序,可以从网站读取数据,然后使用 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
答案 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