使用requests保存响应文件报错:TypeError: can't concat int to bytes
解决TypeError: can't concat int to bytes问题并实现多文件保存
嘿,我来帮你搞定这个问题~
首先,咱们先搞清楚错误的根源:你代码里的for i in response循环,其实是在遍历响应内容的字节块(i是bytes类型),这时候你尝试i+1,相当于把整数和字节拼接,Python肯定会报错啦!
看你的需求是要每次迭代保存文件到指定文件夹,并且文件名不同——我猜你是想保存这个文件的多个副本,文件名按序号递增?那咱们得调整循环的方式,直接生成序号来命名,而不是遍历响应内容。
修正后的代码方案
import os import requests # 目标URL和保存文件夹 url = "http://speedtest.ftp.otenet.gr/files/test100k.db" save_directory = '/Path/To/File/' # 确保保存文件夹存在,不存在就创建(已存在不会报错) os.makedirs(save_directory, exist_ok=True) # 发送请求并确保请求成功 response = requests.get(url) response.raise_for_status() # 如果请求失败会直接抛出异常 # 循环生成序号,保存多个文件(这里示例保存5个,你可以改范围) for file_num in range(1, 6): # 用os.path.join拼接路径,跨平台更稳妥 file_path = os.path.join(save_directory, f'test_file({file_num}).db') with open(file_path, 'wb') as f: f.write(response.content)
关键调整点:
- 用
range(1, 6)生成从1到5的整数序号,避免了字节和整数拼接的类型错误 - 用
os.makedirs确保保存文件夹存在,防止“找不到路径”的错误 - 用
os.path.join拼接文件路径,不管Windows还是Linux都能正常工作 - 加入
response.raise_for_status(),如果请求失败(比如404、500)会直接报错,避免保存空文件
如果你的需求是分块下载大文件并分块保存成不同文件(不过这个测试文件很小,可能不是),那可以用response.iter_content(chunk_size=1024)来遍历字节块,然后按块序号命名,需要的话可以随时说~
内容的提问来源于stack exchange,提问作者user9412927
相关产品推荐
相关产品推荐

