尝试将csv文件保存到s3存储桶时出现编码错误(python)

时间:2018-04-12 09:10:34

标签: python amazon-web-services amazon-s3 character-encoding

我试图将csv文件直接保存到S3存储桶中。 Howerver,因为我没有找到直接执行此操作的方法(不使用pandas数据框),我将其保存到本地计算机中,将其上传到S3然后将其从本地删除机器,这是我的代码:

data= [[None, u'https://aaa.com/p/cat.do?tags=|5555|4444|8888&zzz;A=3', u'00.00.00.000, 00.00.00.000', u'25359725', u'2018-03-06 18:01:18', u'DC01F54GH8D.aa201', None, 1814498434, 765651, u'2018-03-12 18:01:18', 168, 0, u'2018-03-12 18:32:08.428032'], [None, u'https://aaa.com/p/cat.do?tags=|5555|4444|8888&zzz;A=', u'00.00.00.000, 00.00.00.000', u'10707456', u'2018-03-06 18:01:02', u'76FD86AA.abd', None, 1814498440, 760960, u'2018-03-12 18:01:02', 168, 0, u'2018-03-12 18:32:08.805207']]

s3_resource = boto3.resource('s3')
filename="#"+str(datetime.utcnow()).replace(" ","_").replace(":","")+".csv"
with open(filename, "wb") as f:
    writer = csv.writer(f)
    writer.writerows(data)
s3_resource.Object('my_bucket', filename).put(Body=open(filename, 'rb'))
os.remove(filename)

上面提到的数据列表只是实际数据的一小部分。 不幸的是,这引发了这个错误:

writer.writerows(data)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 152-153: ordinal not in range(128)

我试图改变:

with open(filename, "wb") as f:

通过

with open(filename, "wb", errors='ignore') as f:

但我得到了这个:

'errors' is an invalid keyword argument for this function

我可以获得一些有关此编码问题的帮助吗?如果有人知道将csv文件保存到s3的更好方法,请与我们分享您的解决方案。

非常感谢。

我正在使用python 2.7

1 个答案:

答案 0 :(得分:0)

如果您希望使用boto3 将文件上传到S3,则更简单的方法是:

import boto3

client = boto3.client('s3')
client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')