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

如何去除base64.b64encode导出CSV后出现的多余换行?

问题

我正在使用base64对二进制图片文件进行编码,代码如下:

with open("33111117789.jpg", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())

根据Python 3.8官方文档,我预期该方法返回不含换行的bytes对象,但将编码结果导出到CSV文件后出现了多余换行,导出代码如下:

# Update to csv
dateNow = datetime.datetime.today().strftime('%d.%m.%Y')
data = ["1", dateNow, "+33111117789", encoded_string]

with open('output.csv', 'a', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f, delimiter=';', lineterminator='\n')
    writer.writerow(data)

预期结果应为单行,但实际出现多行换行。我尝试过base64.encode()和base64.b64encode(),结果一致。另外注意到每个换行前都有+号,请问是否用错了base64函数或遗漏了参数?+号是否需要去除?

解决方案

问题根源

换行问题和+号无关,核心原因是直接将bytes类型的base64编码结果传入了csv.writer。CSV写入器会把bytes对象当作可迭代对象处理,逐个字节写入时,若遇到对应ASCII换行符的字节就会自动换行;而+是base64编码的合法字符,完全不需要去除。

解决步骤

  1. 将bytes转成字符串:把base64.b64encode返回的bytes对象解码为UTF-8字符串,避免CSV写入器迭代单个字节:
    encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
  2. 完整修正代码:保留你原有的CSV写入参数(newline=''和lineterminator='\n'设置合理),修改后的完整代码如下:
    import base64
    import datetime
    import csv
    
    # 编码图片
    with open("33111117789.jpg", "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    # 写入CSV
    dateNow = datetime.datetime.today().strftime('%d.%m.%Y')
    data = ["1", dateNow, "+33111117789", encoded_string]
    
    with open('output.csv', 'a', encoding='utf-8-sig', newline='') as f:
        writer = csv.writer(f, delimiter=';', lineterminator='\n')
        writer.writerow(data)
    

额外说明

  • base64.b64encode本身不会生成换行符,问题出在bytes对象的处理逻辑上,而非编码函数本身。
  • +是base64标准中用来替代/的合法字符,删除会导致后续解码失败,绝对不能随意去除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:10:25