python - 使用 TQDM 几乎使我的 GET 请求的文件大小翻了一番
问题描述
我一直在编写代码来下载互联网的 GRIB(天气)文件以供将来使用。现在,我只是在正确的文件夹中下载和写入的阶段,但由于某种原因,当我使用 TQDM 作为进度条时,文件大小几乎翻了一番。没有进展,文件大小很好。
使用以下代码,我得到一个 2.3MB 的文件。
import datetime
fsearch = datetime.date.today().strftime('%Y%m%d00')
def sfc_pres():
id = fsearch
url = 'https://dd.weather.gc.ca/ensemble/geps/grib2/raw/00/000/CMC_geps-raw_PRES_SFC_0_latlon0p5x0p5_{0}_P000_allmbrs.grib2'.format(id)
r = requests.get(url, allow_redirects=True)
stat=r.status_code
while stat:
if stat==200:
print('Fichier trouvé, téléchargement')
elif stat==404:
print('Fichier introuvable')
break
id = fname
with open(r'C:\Users\JM\Desktop\GRIB\Pression de surface 00UTC {0}.grib2'.format(id) , 'wb') as f:
f.write(r.content)
如果我将 TQDM 用于这样的进度条,我会得到一个 4.5MB 的文件。
import datetime
fsearch = datetime.date.today().strftime('%Y%m%d00')
fname = datetime.date.today().strftime('%d-%m-%Y')
def sfc_pres():
id = fsearch
url = 'https://dd.weather.gc.ca/ensemble/geps/grib2/raw/00/000/CMC_geps-raw_PRES_SFC_0_latlon0p5x0p5_{0}_P000_allmbrs.grib2'.format(id)
r = requests.get(url, allow_redirects=True)
stat=r.status_code
while stat:
if stat==200:
print('Fichier trouvé, téléchargement')
elif stat==404:
print('Fichier introuvable')
break
from tqdm import tqdm
total_size_in_bytes= int(r.headers.get('content-length', 0))
block_size = 1024
progress_bar = tqdm(total=total_size_in_bytes, unit='iB', unit_scale=True)
id = fname
with open(r'C:\Users\JM\Desktop\GRIB\Pression de surface 00UTC {0}.grib2'.format(id) , 'wb') as f:
f.write(r.content)
for data in r.iter_content(block_size):
progress_bar.update(len(data))
f.write(data)
progress_bar.close()
if total_size_in_bytes != 0 and progress_bar.n != total_size_in_bytes:
print("Échec du téléchargement")
我的故障排除让我知道它在 TQDM 代码中,但我找不到原因......
解决方案
如果您正在使用r.iter_content
,您也不应该调用f.write(r.content)
- 那么您将两次写入数据(并失去您试图获得的流式传输行为)。
推荐阅读
- ios - 从循环播放列表中播放视频播放列表和单个视频剪辑,AVQueuePlayer iOS Swift
- java - 如何获取“主机”对象java
- json - 如何使用 JOLT 将整个 JSON 对象作为值映射到新的 JSON 键中?
- java - 如何从包含excel xls文件中的公式的单元格中获取单元格值
- amazon-web-services - Creating TWO way trusts between two AWS managed Active Directory
- android - 使用 gradle 模块作为具有特定风格的依赖项
- php - 图像移动到文件夹但不保存数据库中的行
- css - 在本机反应中将图像放在视图上
- python - 如何防止pytest在测试期间打印局部变量
- go - 如何使用 go 获取切片中的单个项目计数?