list_objects example create aws python amazon-web-services amazon-s3 boto3

python - example - Leer el contenido del archivo desde el cubo S3 con boto3



python s3 bucket (2)

Leí los nombres de archivo en mi cubo S3 haciendo

objs = boto3.client.list_objects(Bucket=''my_bucket'') while ''Contents'' in objs.keys(): objs_contents = objs[''Contents''] for i in range(len(objs_contents)): filename = objs_contents[i][''Key'']

Ahora, necesito obtener el contenido real del archivo, de manera similar a un open(filename).readlines() . ¿Cuál es la mejor manera?


Cuando desee leer un archivo con una configuración diferente a la predeterminada, siéntase libre de usar mpu.aws.s3_read(s3path) directamente o el código copiado:

def s3_read(source, profile_name=None): """ Read a file from an S3 source. Parameters ---------- source : str Path starting with s3://, e.g. ''s3://bucket-name/key/foo.bar'' profile_name : str, optional AWS profile Returns ------- content : bytes botocore.exceptions.NoCredentialsError Botocore is not able to find your credentials. Either specify profile_name or add the environment variables AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN. See https://boto3.readthedocs.io/en/latest/guide/configuration.html """ session = boto3.Session(profile_name=profile_name) s3 = session.client(''s3'') bucket_name, key = mpu.aws._s3_path_split(source) s3_object = s3.get_object(Bucket=bucket_name, Key=key) body = s3_object[''Body''] return body.read()


boto3 ofrece un modelo de recurso que facilita tareas como iterar a través de objetos. Desafortunadamente, StreamingBody no proporciona readline o readlines .

s3 = boto3.resource(''s3'') bucket = s3.Bucket(''test-bucket'') # Iterates through all the objects, doing the pagination for you. Each obj # is an ObjectSummary, so it doesn''t contain the body. You''ll need to call # get to get the whole body. for obj in bucket.objects.all(): key = obj.key body = obj.get()[''Body''].read()