Python 试图将数据帧移动到S3存储桶时发生编码错误
我很可能会很难做到这一点,所以我非常愿意接受建议 我的想法是(尝试)将pd.DataFrame对象写入S3存储桶,以便将其复制到红移数据库。这是一个重要的问题:Python 试图将数据帧移动到S3存储桶时发生编码错误,python,pandas,amazon-s3,character-encoding,Python,Pandas,Amazon S3,Character Encoding,我很可能会很难做到这一点,所以我非常愿意接受建议 我的想法是(尝试)将pd.DataFrame对象写入S3存储桶,以便将其复制到红移数据库。这是一个重要的问题: import gzip from io import StringIO, BytesIO from boto.s3.connection import S3Connection conn = S3Connection() bucket = conn.get_bucket('my-bucket') key = bucket.new_ke
import gzip
from io import StringIO, BytesIO
from boto.s3.connection import S3Connection
conn = S3Connection()
bucket = conn.get_bucket('my-bucket')
key = bucket.new_key('temp.gz')
fp, gzfp = StringIO(), BytesIO()
csvd = df.to_csv(fp, index=False, header=False)
fp.seek(0)
gzipped = gzip.GzipFile(fileobj=gzfp, mode='w')
gzipped.write(bytearray(fp.read(), 'utf-8'))
gzipped.close()
gzfp.seek(0)
key.set_contents_from_file(gzfp)
它失败于:
----> 1 key.set_contents_from_file(gzfp)
<snip>
/usr/local/lib/python3.6/site-packages/boto/connection.py in proxy_ssl(self, host, port)
795 sock = socket.create_connection((self.proxy, int(self.proxy_port)))
796 boto.log.debug("Proxy connection: CONNECT %s HTTP/1.0\r\n", host)
--> 797 sock.sendall("CONNECT %s HTTP/1.0\r\n" % host)
798 sock.sendall("User-Agent: %s\r\n" % UserAgent)
799 if self.proxy_user and self.proxy_pass:
TypeError: a bytes-like object is required, not 'str'
--->1键。从文件(gzfp)设置内容
/代理ssl中的usr/local/lib/python3.6/site-packages/boto/connection.py(self、host、port)
795 sock=socket.create_连接((self.proxy,int(self.proxy_端口)))
796 boto.log.debug(“代理连接:连接%s HTTP/1.0\r\n”,主机)
-->797 sock.sendall(“连接%s HTTP/1.0\r\n”%host)
798 sock.sendall(“用户代理:%s\r\n”%UserAgent)
799如果self.proxy_用户和self.proxy_通过:
TypeError:需要类似字节的对象,而不是“str”
我被难住了。为什么gzfp
不是一个像字节一样的对象
提前感谢您的帮助
编辑:
愚蠢的我!下面的评论完全正确,非常感谢!通过将boto.connection
中对sendall
的调用更改为sendall(bytearray('xxx','utf-8'))
解决了此问题,现在一切正常
再次感谢 我建议您使用。(odo内部使用boto进行AWS操作)您可以使用
$ conda install odo
下一步设置您的
现在您可以使用odo将文件传输到S3
from odo import odo
odo(df,'s3://path_to_csv_file.csv')
您可以使用以下任意格式转换
pd.Dataframe
:代码不是在抱怨sendall吗?或者至少我不理解797的那条线。它似乎与gzfp没有任何关系。你知道,我想你已经了解了一些东西,这表明我已经关注这个问题太久了……Python 2.7上的sendall需要字符串,但3.6上的sendall需要字节。您是使用Python 2.7还是3.6运行代码?@Matt您需要GZ格式还是CSV格式?这看起来很有用,谢谢!然而,我不能在这个特殊的例子中使用它(至少不需要一些努力),因为我被降级到非常严格的公司playpen。设置凭据是个问题。不过,下次我会记住它,因为它看起来既漂亮又简单!由于ODO
在内部使用boto
,因此有多种方法设置凭据。检查您是否可以使用这两种方法之一