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