簡體   English   中英

返回在過去24小時內修改過的Amazon S3存儲桶中的所有密鑰

[英]Return all keys from an Amazon S3 bucket which have been modified in the past 24 hours

情況如下:我遠程工作,大多數時候人們都在向我們的Amazon S3實例添加數據集。 這些數據集中的每一個都需要一些非常類似的處理任務,我可以使用一些非常簡單的python自動執行這些任務。 但是,我似乎無法使用修改日期隔離過去24小時內添加到S3的數據集。 這是我到目前為止:

import boto3 
from boto3.session import Session
ACCESS_KEY = xxxx
SECRET_KEY = xxxx
session = Session(aws_access_key_id=ACCESS_KEY, 
aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
s3_client = boto3.client('s3')
def get_all_s3_keys(bucket):
    keys = []
    kwargs = {'Bucket': bucket}
    while True:
        resp = s3_client.list_objects_v2(**kwargs)
        for obj in resp['Contents']:
            keys.append(obj['Key'])
        try:
            kwargs['ContinuationToken'] = resp['NextContinuationToken']
        except KeyError:
            break
    return keys

bucket_keys = get_all_s3_keys('mybucket')
recnt_keys = [key for key in bucket_keys if 'Temp' in key]

這將返回包含單詞“Temp”的'mybucket'中的所有鍵,但這顯然不能幫助我修改日期。 一旦我得到最近修改過的密鑰列表,我希望能夠迭代並將它們下載到預定的本地路徑。

有什么想法嗎?

謝謝

試試這個片段(只需獲取所有項目然后過濾):

import boto3
import datetime

s3 = boto3.resource('s3')
s3_bucket = s3.Bucket('mybucket')
items = [item for item in s3_bucket.objects.filter()] # get them all
now = datetime.datetime.now(datetime.timezone.utc)
td = datetime.timedelta(hours=24)
last_24_hours_keys = [item.key for item in items if now - item.last_modified < td] # filter

HTH。

哇! 感謝@Matt Messersmith的建議。 我正在使用Python 2(dang Esri python安裝 - 但我需要arcpy)。 我將為下面的python 2添加稍微調整。 不得不使用pytz而不是datetime.timezone.utc。

s3 = boto3.resource('s3')  s3_bucket = s3.Bucket('bucket') 
items = [item for item in s3_bucket.objects.filter()]  
now = datetime.datetime.now(pytz.utc)  
td = datetime.timedelta(hours=24)  
last_24_hours_keys = [item.key for item in items if now - item.last_modified < td]  
print last_24_hours_keys

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM