Digamos, por ejemplo, que tengo configurado el siguiente depósito:
bucketone …/folderone …/text1.txt …/text2.txt …/foldertwo …/file1.json …/folderthree …/folderthreesub …/file2.json …/file3.jsonPero solo baja un nivel.
¿Cuál es la forma correcta de recuperar información debajo de un cubo?
Se asegurará de aceptar / votar la respuesta.
Al contrario de la forma en que pensaría que funcionará, rsplit() en realidad devuelve las divisiones de izquierda a derecha, aunque las aplica de derecha a izquierda.
Por lo tanto, en realidad desea obtener el último elemento de la división:
filename = obj['Key'].rsplit('/', 1)[-1] Ver: Documentación de Python rsplit()
Además, tenga cuidado con los 'directorios ficticios' que pueden crearse a través de la consola. En realidad, son archivos de longitud cero que hacen que la carpeta aparezca en la interfaz de usuario. Por lo tanto, omita los archivos sin nombre después de la barra inclinada final.
Realice esas correcciones y funciona como se desea:
import boto3 import os s3client = boto3.client('s3') for obj in s3client.list_objects_v2(Bucket='my-bucket')['Contents']: filename = obj['Key'].rsplit('/', 1)[-1] localfiledir = os.path.join('/tmp', filename) if filename != '': s3client.download_file('my-bucket', obj['Key'], localfiledir)¿Qué tiene de malo hacer esto desde la CLI?
aws s3 cp s3://bucketing . --recursive