📅  最后修改于: 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
方法迭代每个分块数据,并在循环体内进行下载进度的提示。
通过以上介绍,可以看出将数据下载到文件中是一个非常简单的过程。同时,进一步地添加下载进度提示,能够为用户提供更良好的使用体验。