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
相关产品推荐
相关产品推荐

