📜  下载到文件 (1)

📅  最后修改于: 2023-12-03 15:35:53.990000             🧑  作者: Mango

下载到文件

在程序中,有时候需要将获取的网络资源或者程序生成的数据保存到本地,这就需要将数据下载到文件中。下载到文件可以实现永久保存数据的目的,同时也可以方便后续的读取和处理。

实现方法

在Python中,可以通过以下方式将数据下载到文件中:

import urllib.request

url = "http://www.example.com/file.txt"
filename = "file.txt"
urllib.request.urlretrieve(url, filename)

上述代码中,urlretrieve函数会从URL地址中获取数据并保存到指定的文件中。其中,url参数传入要下载的数据的链接地址,filename参数传入要保存的文件名。

除了使用Python自带的urllib.request模块,还可以使用第三方模块requests来实现文件下载:

import requests

url = "http://www.example.com/file.txt"
filename = "file.txt"
r = requests.get(url)

with open(filename, "wb") as f:
    f.write(r.content)

上述代码中,requests.get(url)会发起一个HTTP请求,返回包含响应内容的一个请求对象。在这个请求对象上,可以通过content属性获取响应内容的二进制数据。然后,通过open函数打开要保存的文件,并将获取的二进制数据写入文件中。

下载进度显示

对于大文件的下载,如果没有下载进度的提示,用户可能会以为程序已经崩溃了。因此,下载进度的提示非常重要。可以使用tqdm模块来实现文件下载进度的提示:

from tqdm import tqdm

import requests

url = "http://www.example.com/bigfile.zip"
filename = "bigfile.zip"
r = requests.get(url, stream=True)

with open(filename, "wb") as f:
    for chunk in tqdm(r.iter_content(chunk_size=1024)):
        if chunk:
            f.write(chunk)

在上述代码中,stream=True的作用是启用流式传输,即分块下载文件,可以避免占用过多的内存。然后,通过tqdm模块的iter_content方法迭代每个分块数据,并在循环体内进行下载进度的提示。

结束语

通过以上介绍,可以看出将数据下载到文件中是一个非常简单的过程。同时,进一步地添加下载进度提示,能够为用户提供更良好的使用体验。