Python下载写入文件时如何在终端打印圆点等进度反馈提示
实现方案
你当前的写法是一次性将整个文件加载到内存后再写入磁盘,没有中间过程可以插入进度提示,我们可以通过requests的流式下载能力实现逐块下载,每下载一块就追加打印一个圆点即可。
核心修改点
- 给
requests.get添加stream=True参数,开启流式下载,避免一次性加载全量文件内容 - 迭代
res.iter_content逐块读取响应内容,每写一块就打印一个圆点 - 打印圆点时关闭自动换行、强制刷新输出缓冲区,保证圆点逐次追加在同一行
完整示例代码
import requests import os # 提前创建downloads目录,避免写入时报路径不存在错误 os.makedirs("./downloads", exist_ok=True) url_to_file = "替换为你的文件下载链接" file_name = "替换为你要保存的文件名" # 开启流式下载 res = requests.get(url_to_file, stream=True) # 先打印前缀,不换行 print("Downloading file ", end="", flush=True) with open(f"./downloads/{file_name}", 'wb') as f: # 每次读取1024字节,可根据需求调整块大小,块越小圆点刷新越频繁 for chunk in res.iter_content(chunk_size=1024): if chunk: # 过滤掉空的心跳块 f.write(chunk) # 打印圆点,不换行立即刷新输出 print(".", end="", flush=True) # 全部写完后换行打印完成提示 print("\nDone!")
效果说明
运行代码后会先输出Downloading file ,之后每下载1KB内容就追加一个圆点,全部下载写入完成后换行输出Done!,和你需要的效果完全一致。如果是大文件也可以调整chunk_size参数控制圆点刷新的频率,比如改成10240就是每下载10KB打印一个圆点。
内容的提问来源于stack exchange,提问作者guilfer
相关产品推荐
相关产品推荐

