![](/img/trans.png)
[英]Boto + Python + AWS S3: How to get last_modified attribute of specific file?
[英]How to get last modified date of latest file from S3 with Boto Python?
這是我的 s3 存儲桶的結構
Bucket 1
Company A
File A-02/01/20
File A-01/01/20
File B-02/01/20
File B-01/01/20
Company B
File A-02/01/20
File A-01/01/20
我正在嘗試轉到存儲桶 1 >> 導航到 A 公司文件夾並找到文件 A 的最新版本並打印修改日期,我想對文件 B 和 B 公司文件夾/文件 A 重復相同的步驟。我我是 S3 和 Boto3 的新手,所以還在學習。 這是我的代碼到目前為止
import boto3
from datetime import datetime, timezone
today = datetime.now(timezone.utc)
s3 = boto3.client('s3', region_name='us-east-1')
objects = s3.list_objects(Bucket='Bucket 1',Prefix = 'Company A'+'/File')
for o in objects["Contents"]:
if o["LastModified"] != today:
print(o["Key"] +" "+ str(o["LastModified"]))
這將打印出以下內容:
File A_2019-10-28.csv 2019-11-11 18:31:17+00:00
File A_2020-01-14.csv 2020-01-14 21:17:46+00:00
File A_2020-01-28.csv 2020-01-29 19:19:58+00:00
但我想要的只是檢查文件 A_2020-01-28.csv 並打印 if !=today,與文件 B 相同
假設“文件 A”的末尾總是有一個日期,您可以在前綴搜索中使用“A”部分。 S3 要記住的一件事是沒有文件夾這樣的東西。 這是您在鍵名中使用“/”所暗示的。 S3 僅適用於存儲桶/密鑰。
該文件的最新版本將是具有最新last_modified
字段的版本。 一種方法是根據該屬性對(“A”文件的)對象列表進行排序:
from operator import attrgetter
objs = s3.Bucket('Bucket 1').objects.filter(Prefix='Company A/File A')
# sort the objects based on 'obj.last_modified'
sorted_objs = sorted(objs, key=attrgetter('last_modified'))
# The latest version of the file (the last one in the list)
latest = sorted_objs.pop()
例如:我按順序創建了 foo1.txt、foo2.txt、foo3.txt。 然后是 foo10.txt、foo5.txt。 foo5.txt 是我最新的“foo”文件。
>>> b.upload_file('/var/tmp/foo.txt','foo10.txt')
>>> b.upload_file('/var/tmp/foo.txt','foo5.txt')
>>> [i.key for i in b.objects.all()] ## no ordering
['foo.txt', 'foo10.txt', 'foo2.txt', 'foo3.txt', 'foo5.txt']
>>> f2 = sorted(b.objects.all(), key=attrgetter('last_modified'))
>>> f2
[s3.ObjectSummary(bucket_name='foobar', key='foo.txt'), s3.ObjectSummary(bucket_name='foobar', key='foo2.txt'), s3.ObjectSummary(bucket_name='foobar', key='foo3.txt'), s3.ObjectSummary(bucket_name='foobar', key='foo10.txt'), s3.ObjectSummary(bucket_name='foobar', key='foo5.txt')]
>>> f2.pop()
s3.ObjectSummary(bucket_name='foobar', key='foo5.txt')
有關 Python 排序的更多詳細信息,請參閱: https : //wiki.python.org/moin/HowTo/Sorting
幾乎在那里,但是if
語句比較了包含日期和時間的 2 個不同的datetime
對象 - 時間會有所不同。 如果您只在日期之后, if
更改為:
if o["LastModified"].date() != today.date():
適用於 Python 3.6.9。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.