我试图将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
答案 0 :(得分:0)
如果您希望使用boto3 将文件上传到S3,则更简单的方法是:
import boto3
client = boto3.client('s3')
client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')