【问题标题】:Downloading file in python (using urllib and shutil) [duplicate]在python中下载文件(使用urllib和shutil)[重复]
【发布时间】:2020-07-01 16:07:01
【问题描述】:

我正在搜索 python 脚本来下载文件,我找到了urllib.request.urlopen 的两种下载方式。其中一个使用shutil 模块,另一个不使用。

现在我想知道这两个脚本有什么区别?

# 1:
import urllib
filedata = urllib.request.urlopen('http://download.thinkbroadband.com/10MB.zip')
datatowrite = filedata.read()
with open('10MB.zip', 'wb') as f:
    f.write(datatowrite)

# 2:
import urllib,shutil
with urllib.request.urlopen('http://download.thinkbroadband.com/10MB.zip') as response, open("10MB.zip", 'wb') as f:
    shutil.copyfileobj(response, f)

【问题讨论】:

    标签: python download urllib shutil


    【解决方案1】:

    两者都很好,差别很小。

    根据urllib docs,urlopen 总是返回一个可以作为上下文管理器工作的对象(即可以在 with 语句中使用)。

    在示例 #1 中,所有数据都从响应中读取并存储在内存中(变量 datatowrite)。然后从这个变量写入一个文件。

    在示例 #2 中,数据从对文件的响应中直接以块的形式读取(通过 shutil.copyfileobj)。

    恕我直言,示例 #2 使用的内存更少,尤其是在下载大文件时。

    【讨论】:

    • 是的。这正是我想听到的。非常感谢。我搜索了很多,但没有答案。
    猜你喜欢
    • 2021-11-12
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多