You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:08:07