मेरे पास एडब्ल्यूएस में एक बाल्टी है जिसमें फाइलें नियमित रूप से अपलोड की जाती हैं। एक नीति है कि इस बकेट में जीवनचक्र के नियम संलग्न नहीं हो सकते हैं।

मैं एक लैम्ब्डा की तलाश में हूं जो 2 सप्ताह से अधिक पुरानी वस्तुओं को हटा देगा। मुझे पता है कि टाइमडेल्टा लाइब्रेरी का उपयोग तिथियों की तुलना करने के लिए किया जा सकता है, लेकिन मैं यह नहीं समझ सकता कि मैं इसका उपयोग कैसे कर सकता हूं यह जांचने के लिए कि कोई वस्तु 2 सप्ताह से अधिक पुरानी है या नहीं (मैं अजगर के लिए नया हूं)।

अब तक मेरे पास है:

import boto3
import datetime

s3 = boto3.resource('s3')

now = datetime.datetime.now()
now_format = int(now.strftime("%d%m%Y"))
print(f'it is now {now_format}')

# Get bucket object
my_bucket = s3.Bucket('cost-reports')
all_objects = my_bucket.objects.all()

for each_object in all_objects:
    obj_int = int(each_object.last_modified.strftime('%d%m%Y'))

    print("The object {} was last modified on the {}".format(
        each_object.key, obj_int))

तो यह सिर्फ strftime तुलना का उपयोग कर रहा है, लेकिन क्या यह वास्तव में भी काम करेगा? या क्या मुझे टाइमडेल्टा मॉड्यूल का उपयोग करना है और यह कैसा दिखेगा?

1
scrow 21 जून 2021, 11:54

2 जवाब

सबसे बढ़िया उत्तर

आपकी each_object.last_modified datetime वस्तु है, ठीक now की तरह।

तो पिछले संशोधन से दिनों की संख्या की गणना करने के लिए, यह उतना आसान होना चाहिए जितना:

now = datetime.datetime.now().astimezone()
last_modified_days_ago = (now - each_object.last_modified).days
1
Marcin 21 जून 2021, 13:21

आप उपयोग कर सकते हैं:

from datetime import datetime, timedelta
from dateutil.tz import tzutc, UTC

...

for object in bucket.objects.all():
    if object.last_modified > datetime.now(tzutc()) - timedelta(days = 14):
        <Do something here>

कोड कॉपी किया गया: पिछले 24 घंटों में बनाई गई Amazon S3 फ़ाइलों को डाउनलोड करने के लिए Python स्क्रिप्ट को बेहतर बनाएं

0
John Rotenstein 21 जून 2021, 13:37