使用requests.get与shutil.copyfileobj时如何获取数据文件大小?
获取文件大小的两种可行方法
方法一:从响应头Content-Length提取(服务器需返回该字段)
直接从requests响应的headers中获取Content-Length字段值,转为整数即为文件的字节大小。代码示例:
import requests import shutil target_url = "你的目标文件URL" save_path = "本地保存路径" with requests.get(target_url, stream=True) as r: # 检查响应头是否包含Content-Length if 'Content-Length' in r.headers: file_size = int(r.headers['Content-Length']) print(f"文件大小:{file_size} 字节") with open(save_path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f)
注意:若服务器采用分块传输编码(响应头含Transfer-Encoding: chunked),则不会返回Content-Length,此方法失效。
方法二:写入完成后计算本地文件大小
如果无法从响应头获取大小,可在文件完全写入本地后,通过系统API读取文件大小:
import requests import shutil import os save_path = "本地保存路径" target_url = "你的目标文件URL" with requests.get(target_url, stream=True) as r: with open(save_path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) # 写入完成后获取文件大小 file_size = os.path.getsize(save_path) print(f"文件大小:{file_size} 字节")
这种方法不受服务器传输方式限制,唯一不足是需等待文件写入完成才能得到结果。
内容的提问来源于stack exchange,提问作者G Naik
相关产品推荐
相关产品推荐

