如何使用boto获取S3对象的上次修改日期时间?

vre*_*eal 21 python amazon-s3 boto amazon-web-services

我正在编写一个python脚本,使用boto将文件上传到s3.我想只上传已更改的文件,我可以通过它的最后修改日期时间来检查.但我找不到api来获取boto API中的最后修改.

gar*_*aat 31

这是一段Python/boto代码,它将打印存储桶中所有键的last_modified属性:

>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)

  • 如果需要DateTime,可以使用boto.utils.parse_ts来解析TZ字符串并返回DateTime对象. (12认同)
  • 奇怪的是,parse_ts函数不能用key.last_modified返回的格式.我得到时间数据'星期五,2012年7月20日16:57:27 GMT'与格式'%Y-%m-%dT%H不匹配: %M:%S%FZ" (5认同)
  • 为了记录,这并不完美; last_modified是一个字符串,当你可能想要的是一个日期时间 (2认同)
  • 仅供将来参考,这对我有用: time.strptime(key.last_modified, '%a, %d %b %Y %H:%M:%S %Z') (2认同)

Gar*_*aid 18

Boto3LastModified在您使用 (S3) Objectpython 对象时返回一个日期时间对象:

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

您不需要执行任何曲折的字符串操作。

LastModified与今天的日期 (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"])
Run Code Online (Sandbox Code Playgroud)

你只需要知道它LastModifed是时区感知的,所以你与之比较的任何日期也必须是时区感知的,因此:

datetime.now(timezone.utc)


Eya*_* Ch 7

这是有效的(从上面到tnx到jdennison):

从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))
Run Code Online (Sandbox Code Playgroud)

  • 您回答了错误的问题 - 问题是关于获取 s3 文件的日期,而不是关于格式化它。 (5认同)

bon*_*ney 6

对于一个 s3 对象,您可以使用 boto 客户端的head_object()方法,该方法比list_objects_v2()一个对象更快,因为返回的内容较少。返回值datetime类似于所有 boto 响应,因此易于处理。

head_object()方法带有围绕对象修改时间的其他功能,无需在list_objects()结果后进一步调用即可利用这些功能。

看到这个:https : //boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.head_object

import boto3

s3 = boto3.client('s3')
response = client.head_object(Bucket, Key)
datetime_value = response["LastModified"]
Run Code Online (Sandbox Code Playgroud)