如何在Python中下载没有MemoryError的大文件?

青蛙

我想以编程方式下载一些文件,但MemoryError较大的文件却出现异常。例如,当我尝试下载一个较小的文件时,代码很好,但是当我尝试下载较大的文件时,却捕获了一个MemoryError

这是我的代码:

def __download_gpl_file(accession):
    try:
        bin_string = __get_response(accession)
        if bin_string is None:
            return False
        string = __unzip(bin_string)
    except MemoryError:
        print 'Out of memory for: ' + accession
        return False

    if string:
        filename = DOWNLOADED + accession + '.txt'
        with open(filename, 'w+') as f:
            f.write(string)
        return True
    return False


def __get_response(attempts=5):
    url = __construct_gpl_url(accession)  # Not shown
    response = None
    while attempts > 0:
        try:
            response = urllib2.urlopen(url)
            if response and response.getcode() < 201:
                break
            else:
                attempts -= 1
        except urllib2.URLError:
            print 'URLError with: ' + url
    return response.read()


def __unzip(bin_string):
    f = StringIO(bin_string)
    decompressed = gzip.GzipFile(fileobj=f)
    return decompressed.read()

我可以做些什么来下载较大的文件吗?提前致谢。

黑客狂

而不是一次写入整个文件,而是逐行写入:

file = urllib2.urlopen('url')
with open('filename','w') as f:
    for x in file:
        f.write(x)

如果您想使其更快:

file = urllib2.urlopen('url')
with open('filename','w') as f:
    while True:
        tmp = file.read(1024)
        if not tmp:
            break 
        f.write(tmp)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Python中下载没有MemoryError的大文件?

来自分类Dev

如何在Deno中下载大文件?

来自分类Dev

如何通过ftp在python中下载大文件(具有监视和重新连接)?

来自分类Dev

带有大文件的Python 2.5 MemoryError

来自分类Dev

如何在Java中下载大文件(大小> 50MB)

来自分类Dev

MemoryError-如何使用Python通过Google Drive SDK下载大文件

来自分类Dev

如何在Watir中下载文件?

来自分类Dev

如何在webView中下载文件?

来自分类Dev

如何在Codeigniter中下载文件?

来自分类Dev

如何在JS中下载多个文件

来自分类Dev

如何在Android中下载文件

来自分类Dev

如何在webView中下载文件?

来自分类Dev

如何在gradle文件夹中下载带有pom文件的jar文件?

来自分类Dev

如何从回购中下载文件,然后在没有Internet连接的情况下进行安装?

来自分类Dev

Python-如何在没有MemoryError的情况下gzip压缩大型文本文件?

来自分类Dev

如何在AFNetworking 2中下载带有POST +参数的经过身份验证的文件?

来自分类Dev

如何在Spring MVC和MongoDB中下载文件

来自分类Dev

如何在Google Drive SDK中下载Google文件?

来自分类Dev

如何在C#blazor中下载xls文件

来自分类Dev

如何在Codeigniter中下载和删除文件

来自分类Dev

如何在linux / windows中下载文件的子部分?

来自分类Dev

如何在C#中下载文件名?

来自分类Dev

如何在Android中下载音频文件

来自分类Dev

如何在JavaScript中下载巨大的CSV文件

来自分类Dev

如何在Codeigniter中下载转换后的HTML文件

来自分类Dev

如何在Django中下载临时文件?

来自分类Dev

如何在laravel 5.4中下载文件

来自分类Dev

在Python中下载Kaggle文件

来自分类Dev

使用WebClient在Unity3d中下载大文件

Related 相关文章

热门标签

归档