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

Python如何从XML文档中提取base64字节数组并保存为图片文件

问题原因

TypeError: a bytes-like object is required, not 'str'
该报错是因为你以二进制写入模式(wb)打开文件时,write方法要求传入字节类型参数,但你传入的photo是Base64编码的字符串类型,且没有经过解码转换为图片原始字节。另外你获取Base64内容的逻辑也存在问题:XML的<Photo>标签内本身存储的就是已经编码完成的Base64字符串,不需要调用tobase64方法,直接提取标签文本即可。

修正方案

首先导入Python内置的base64模块用于解码,完整可运行代码如下:

import base64
import os

# 提取XML中存储的Base64字符串,strip用于去除首尾可能存在的换行、空格等空白字符
photo_b64_str = record.find('Photo').text.strip()
# 将Base64字符串解码为图片的原始二进制字节
photo_bytes = base64.b64decode(photo_b64_str)
# 构造存储路径,用os.path.join自动适配不同操作系统的路径分隔符
picpath = os.path.join('..', 'pics', f'{upn}.jpg')
# 用with上下文管理器写入文件,无需手动调用close关闭文件
with open(picpath, 'wb') as f:
    f.write(photo_bytes)

异常处理提示

如果解码时出现binascii.Error: Incorrect padding报错,说明Base64字符串末尾的填充符=缺失,可以先手动补全填充符再解码:

# 补全Base64填充,确保字符串长度是4的倍数
padding_needed = 4 - len(photo_b64_str) % 4
if padding_needed:
    photo_b64_str += '=' * padding_needed
photo_bytes = base64.b64decode(photo_b64_str)

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:36:01