在日常工作中,我们经常需要利用代理从网络上下载国外文件,例如数据集、模型文件等。但是,直接使用Python的
requests
库下载大文件时,可能因网络中断导致下载失败且无法实时了解下载进度。因此,本文将介绍如何使用Python编写一个简单的文件下载函数,能够实时显示下载进度,提高下载效率和可视化程度。
应用场景
该代码适用于从网络下载国外文件的场景,特别是当下载文件较大时,通过实时显示下载进度,可以让用户清晰地了解下载的过程,提高用户体验。(支持从断点处重连下载,防止因网络波动导致的下载中断。)
使用方法
首先,将需要下载的文件的URL和本地保存的文件路径传入download_file
函数中即可开始下载。在下载过程中,会使用tqdm
库实时显示下载进度条,用户可以清晰地了解下载的进度。
步骤一:确定代理IP地址及端口
- 在Python代码的开头加入以下代码,替换proxy_ip_address和port为你实际使用的代理IP地址和端口号:
import os
os.environ['HTTP_PROXY'] = 'http://proxy_ip_address:port'
os.environ['HTTPS_PROXY'] = 'http://proxy_ip_address:port'
- 其中,proxy_ip_address和port分别为代理服务器的IP地址和端口号。
- 你可以在你的梯子设置中找到这些信息,通常在设置>网络和Internet>代理>手动设置代理中查看。
- 举例:
import os
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:4683'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:4683'
步骤二:确定资源链接与下载位置
download_file(url, filename)
url
: 需要下载的文件的URL。filename
: 文件保存的本地路径。
- 对应信息填充位置:
完整代码
import requests
from tqdm import tqdm
import os
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:xxxx'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:xxxx'
def download_file(url, filename):
"""
从指定的URL下载文件,并显示下载进度条。
:param url: 文件的URL地址
:param filename: 下载文件保存的路径和文件名
"""
# 检查文件是否存在,如果存在则获取文件大小
if os.path.exists(filename):
file_size = os.path.getsize(filename)
else:
file_size = 0
# 发送HTTP请求,设置Range头部以支持断点续传
headers = {'Range': 'bytes=%d-' % file_size}
response = requests.get(url, stream=True, headers=headers)
# 获取文件总大小
total_size = int(response.headers.get('content-length', 0)) + file_size
# 使用tqdm显示下载进度条
progress_bar = tqdm(total=total_size, initial=file_size, unit='B', unit_scale=True, desc=filename)
# 以二进制方式写入文件
with open(filename, 'ab') as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
progress_bar.update(len(chunk))
# 关闭进度条
progress_bar.close()
def main():
# 下载文件示例
url = 'https://'
filename = r'D:'
download_file(url, filename)
if __name__ == '__main__':
main()
代码优势
- 实时显示下载进度,用户体验好。
- 支持断点续传,当文件已经存在时,会自动判断文件大小并设置Range头部,从上次下载的地方继续下载,避免重新下载整个文件。
- 代码简洁易懂,容易修改和扩展。
注意事项
- 在使用该代码前,请确保已安装
requests
和tqdm
库,可以通过pip install requests tqdm
进行安装。 - 如果下载过程中出现网络异常或下载速度过慢,可以考虑更换下载源或使用代理。
- 注意文件保存路径的设置,确保有足够的磁盘空间和权限。
术语解释
术语/函数 | 解释/用途 |
---|---|
VPN | 虚拟专用网络,用于通过公共网络建立安全连接的技术。在此场景中,用于访问国外资源。 |
requests 库 | Python中用于发送HTTP请求的库,支持多种HTTP方法和认证方式。 |
tqdm 库 | Python中用于在终端中实时显示进度条的库,可用于任何可迭代对象的迭代过程。 |
os.environ | Python中用于管理环境变量的模块,可用于设置代理IP地址和端口号。 |
requests.get() | 发送HTTP GET请求的方法,用于从指定的URL获取数据。 |
response.iter_content() | 返回一个迭代器,用于逐块读取HTTP响应体的内容。 |
open() | Python中用于打开文件的内置函数,支持多种文件操作模式。 |
如果这对您有所帮助,希望点赞支持一下作者! 😊


