¿Cómo puedo obtener la última hora modificada de los objetos S3 con boto?

Estoy escribiendo un script en python para cargar archivos a s3 usando boto. Solo quiero cargar los archivos modificados que puedo verificar por fecha de la última modificación. Pero no puedo encontrar la API para obtener la última modificación en la API de Boto.

Related of "¿Cómo puedo obtener la última hora modificada de los objetos S3 con boto?"

Aquí hay un fragmento de código de Python / boto que imprimirá el atributo last_modified de todas las claves en un cubo:

 >>> import boto >>> s3 = boto.connect_s3() >>> bucket = s3.lookup('mybucket') >>> for key in bucket: print key.name, key.size, key.last_modified index.html 13738 2012-03-13T03:54:07.000Z markdown.css 5991 2012-03-06T18:32:43.000Z >>> 

esto está funcionando (tnx a jdennison desde arriba):

después de obtener la clave de s3:

 import time from time import mktime from datetime import datetime modified = time.strptime(key.last_modified, '%a, %d %b %Y %H:%M:%S %Z') #convert to datetime dt = datetime.fromtimestamp(mktime(modified)) 

Si está utilizando Django y django-storages , puede utilizar una API no oficial en el backend de s3boto :

 >>> from storages.backends.s3boto import _parse_datestring >>> _parse_datestring("Fri, 20 Jul 2012 16:57:27 GMT") datetime.datetime(2012, 7, 21, 2, 57, 27) 

Desafortunadamente a partir de django-storages 1.1.5, esto da una fecha de datación ingenua. django.utils.timezone usar django.utils.timezone para crear una versión compatible :

 >>> from django.utils import timezone >>> naive = _parse_datestring("Fri, 20 Jul 2012 16:57:27 GMT") >>> timezone.make_aware(naive, timezone.get_current_timezone()) datetime.datetime(2012, 7, 21, 2, 57, 27, tzinfo=) 

Convierta el atributo last_modified a struct_time como se indica a continuación

 import time for key in bucket.get_all_keys(): time.strptime(key.last_modified[:19], "%Y-%m-%dT%H:%M:%S") 

Esto le dará una hora.struct_time (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst) para cada tecla en el cubo S3

Boto3 devuelve un objeto de fecha y hora para LastModified cuando usa el Object Python (S3) Object :

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Object.last_modified

No deberías necesitar realizar ninguna manipulación de cuerdas tortuosas.

Para comparar LastModified con la fecha de hoy (Python3):

 import boto3 from datetime import datetime, timezone today = datetime.now(timezone.utc) s3 = boto3.client('s3', region_name='eu-west-1') objects = s3.list_objects(Bucket='my_bucket') for o in objects["Contents"]: if o["LastModified"] == today: print(o["Key"]) 

Solo debes tener en cuenta que LastModifed tiene en cuenta la zona horaria, por lo que cualquier fecha que compares con ella también debe tener en cuenta la zona horaria.

datetime.now(timezone.utc)