Ich schreibe ein Python-Skript, das Dateien hochlädt auf S3 mit boto
librairy. Ich möchte nur hochladen geändert Dateien (die ich anhand ihres "zuletzt geänderten" Datums überprüfen kann), aber ich kann den Boto-API-Endpunkt nicht finden, um das Datum der letzten Änderung zu erhalten.
Antworten
Zu viele Anzeigen?
bradley.ayers
Punkte
35163
Wenn Sie Folgendes verwenden Django y django-storages können Sie eine inoffizielle API im s3boto Backend:
>>> 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)
Leider ergibt dies ab django-storages 1.1.5 eine naive Datumsangabe. Sie müssen verwenden django.utils.timezone
zur Erstellung einer bewusst Version:
>>> 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=<DstTzInfo 'Australia/Brisbane' EST+10:00:00 STD>)
Stefan_EOX
Punkte
801
Mit einer Ressource können Sie eine Iterator für alle Objekte und rufen Sie dann die last_modified
Attribut einer ObjectSummary
.
import boto3
s3 = boto3.resource('s3')
bk = s3.Bucket(bucket_name)
[obj.last_modified for obj in bk.objects.all()][:10]
gibt zurück.
[datetime.datetime(2020, 4, 17, 13, 23, 37, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 23, 37, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 23, 38, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 23, 38, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 23, 38, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 23, 37, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 23, 37, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 17, 13, 20, 20, tzinfo=tzlocal()),
datetime.datetime(2020, 4, 20, 8, 30, 2, tzinfo=tzlocal()),
datetime.datetime(2020, 3, 26, 15, 33, 58, tzinfo=tzlocal())]
ravi.zombie
Punkte
1414
Der boto3-Client gibt lastModifed im Format datetime.datetime an, und es gibt folgende Möglichkeiten, es zu konvertieren
Links: boto3 Link
und aws s3 listobj
import datetime
from dateutil.tz import tzutc
# node s3 response '2019-06-17T18:42:57.000Z'
# python boto3 s3 response datetime.datetime(2019, 10, 1, 22, 41, 55, tzinfo=tzutc())
''' {'ETag': '"c8ba0ad5003832f63690ea8ff9b66052"',
'Key': 'SOMEFILE',
'LastModified': datetime.datetime(2019, 10, 2, 18, 50, 47, tzinfo=tzutc()),
'Size': 6390623,
'StorageClass': 'STANDARD'}
'''
l = datetime.datetime(2019, 10, 1, 22, 41, 55, tzinfo=tzutc())
get_last_modified = int(l.strftime('%s'))
print(l)
print(get_last_modified)
veben
Punkte
14325
arjun
Punkte
346