我有一个s3桶my-bucket
和一个python脚本,我想在桶内创建另一个文件夹(training_data
),包括一个文本文件。我被告知要使用s3fs
,但到目前为止我无法让它工作,我发现文档相当不直观。
我要做的是:
import os
import s3fs
s3 = s3fs.S3FileSystem(anon=False)
path = 's3://my-bucket/training_data/'
if not os.path.exists(path):
os.makedirs(path)
不幸的是,这不起作用,因为它只是在本地创建一个文件夹。顺便说一下,我已经配置了AWS凭证。有人能帮我吗?
S3是一个对象存储,它被设计成一个键值存储,其中键是文件的全名,文件的内容是object。
但是,为了简化组织,Amazon S3控制台支持文件夹概念作为分组对象的一种方式。Amazon S3通过为对象使用共享名称前缀来实现这一点(也就是说,对象的名称以公共字符串开头,默认情况下为/
)。对象名也称为键名。
我建议你使用boto3
包:
import boto3
s3_client = boto3.client(service_name='s3', aws_access_key_id=access_key,
aws_secret_access_key=secret_key)
with open(source_file_path, 'rb') as f:
self.s3_client.put_object(Bucket=bucket, Body=f, Key=s3_prefix)
地点:
source_file_path
-您要上传的文件的路径。
s3_prefix
- s3中所需的键名
您可以直接将文件写入S3。它会帮你创建文件夹。
Python的os
库用于本地文件系统。推荐使用boto3库来使用put_object
API。
参考:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html S3.Client.put_object