def download(name, cache_dir=os.path.join('..', 'data')): #@save
"""下载一个DATA_HUB中的文件,返回本地文件名"""
#断言,若name 不在DATAHUB中,则抛出异常
assert name in DATA_HUB, f"{name} 不存在于{DATA_HUB}"
url, sha1_hash = DATA_HUB[name]
#exist_ok=true 若文件存在,则保持,不抛出异常
os.makedirs(cache_dir, exist_ok=True)
# [-1]取最后一个元素;split:根据’/‘将url分割成数组
fname = os.path.join(cache_dir, url.split('/')[-1])
if os.path.exists(fname):
sha1 = hashlib.sha1()
with open(fname, 'rb') as f:
while True:
# 1048526 B = 1MB 每次读取1MB
data = f.read(1048576)
if not data:
break
# 将data添加到sha1中
sha1.update(data)
if sha1.hexdigest() == sha1_hash:
return fname # 命中缓存
print(f'正在从{url}下载{fname}...')
r = requests.get(url, stream=True, verify=True)
with open(fname, 'wb') as f:
f.write(r.content)
return fname
# url 就是请求的路径
# stream = True,就是 默认情况下,当你进行网络请求后,响应体会立即被下载。你可以通过 stream 参数覆盖这个行为,推迟下载响应体直到访问 Response.content 属性 接着看截图
# verify=True Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。要想检查某个主机的 SSL 证书,你可以使用 verify 参数. 如果你将 verify 设置为 False,Requests 也能忽略对 SSL 证书的验证
————————————————
原文链接:https://blog.csdn.net/jjw_zyfx/article/details/120049350
def download(name, cache_dir=os.path.join(‘..‘, ‘data‘))
于 2023-10-20 11:10:49 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)