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

2023-12-12

这是我的代码。

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)

最后一行代码导致错误: 类型错误:在散列之前必须对 Unicode 对象进行编码

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


您正在写信给StringIO(),它没有内在编码,并且您不能将无法编码为字节的内容写入 S3。无需重新编码您写入的内容即可执行此操作campaing_buffer:

  1. 做你的campaign_buffer a BytesIO()代替StringIO()
  2. Add mode="wb" and encoding="UTF-8" to the to_csv call
  3. Do campaign_buffer.seek(0)在上传之前倒回内存中的文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐