我想将.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上以完整路径直接写文件?
我认为可能需要授权,但是错误消息似乎与授权相关。
答案 0 :(得分:2)
我解决了。我们需要使用access_key_id
和secret_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)