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)
Gar*_*aid 18
Boto3LastModified
在您使用 (S3) Object
python 对象时返回一个日期时间对象:
您不需要执行任何曲折的字符串操作。
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)
这是有效的(从上面到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 对象,您可以使用 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)