如何使用Pandas将文件写入S3

时间:2018-10-19 08:38:01

标签: python-3.x pandas amazon-web-services amazon-s3 boto3

我想将.ann格式的数据帧列写入S3。

现在我正在使用以下代码来做到这一点。

df['user_input'].to_csv(ann_file_path, header=None, index=None, sep=' ')

其中ann_file_path是服务器上.ann文件的完整路径。

我收到以下错误消息:

[Errno 22] Invalid argument: 'https://s3-eu-west-1.amazonaws.com/bucket/sub_folder/somefile.ann'

我为什么得到那个?

还需要使用Boto3进行写操作还是可以在S3上以完整路径直接写文件?

我认为可能需要授权,但是错误消息似乎与授权相关。

1 个答案:

答案 0 :(得分:2)

我解决了。我们需要使用access_key_idsecret_key进行AWS的AWS握手。

从存储桶名称(不是https:/ ...)开始获取URL,因此摆脱掉之前的所有内容。

我的网址:https://s3-eu-west-1.amazonaws.com/bucket/sub_folder/somefile.ann

已转换为:bucket/sub_folder/somefile.ann

执行此操作的代码:ann_file_path = ann_file_path.split('.com/', 1)[1]

一旦获得ann_file_path,我就使用s3fs python库将ann文件上传到服务器。

bytes_to_write = df['user_input'].to_csv(header=None, index=None).encode()
fs = s3fs.S3FileSystem(key=settings.AWS_ACCESS_KEY_ID, secret=settings.AWS_SECRET_ACCESS_KEY)
with fs.open(ann_file_path, 'wb') as f:
   f.write(bytes_to_write)