使用 TQDM 几乎使我的 GET 请求的文件大小增加了一倍
Posted
技术标签:
【中文标题】使用 TQDM 几乎使我的 GET 请求的文件大小增加了一倍【英文标题】:Using TQDM almost doubles the file size of my GET request 【发布时间】:2021-03-25 22:07:36 【问题描述】:我一直在编写代码来下载互联网的 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 代码中,但我找不到原因...
【问题讨论】:
【参考方案1】:如果您使用的是r.iter_content
,则不应同时调用f.write(r.content)
- 那么您将写入两次数据(并失去您试图获得的流式传输行为)。
【讨论】:
以上是关于使用 TQDM 几乎使我的 GET 请求的文件大小增加了一倍的主要内容,如果未能解决你的问题,请参考以下文章