将文件(如对象)保存到 s3 时出现错误:Unicode 对象必须在散列之前进行编码

Raf*_*lik 4 python amazon-s3

这是我的代码。

import boto3
import pandas as pd
import requests
from io import StringIO

campaign_buffer=StringIO()

r = requests.get('https://.... output=csv....')

if r.status_code==200:
    r.encoding='utf-8'
    request_txt = r.text
    campaigns = StringIO(request_txt)
    campaigns_pd = pd.read_csv(campaigns, sep=",")
    campaigns_pd.columns=campaigns_pd.columns.str.replace(':','_')
    campaigns_pd.drop('images_thumb', inplace=True, axis=1)
    campaigns_pd.to_csv(campaign_buffer)
else:
    print('error')

bucket = 'name'
key = 'folder/test.csv'

client = boto3.client('s3')
client.upload_fileobj(campaign_buffer, bucket, key)
Run Code Online (Sandbox Code Playgroud)

最后一行代码导致错误:TypeError: Unicode-objects必须在散列之前进行编码

有什么想法如何解决这个问题吗?

AKX*_*AKX 6

您正在写入StringIO()没有内在编码的 a ,并且您无法写入无法编码为 S3 中的字节的内容。要执行此操作,无需重新编码您写入的内容campaing_buffer

  1. campaign_bufferaBytesIO()改为 aStringIO()
  2. mode="wb"和添加encoding="UTF-8"to_csv通话中
  3. 上传前倒campaign_buffer.seek(0)回内存中的文件