如何使用boto3获取AWS S3指定文件的最后修改日期
问题解答
1、仅使用boto3的client和resource是否可以获取S3指定文件的最后修改日期?
可以实现,你的报错原因是boto3的Bucket对象不支持直接通过[key]的下标方式获取文件对象,正确实现有两种:
基于resource的实现
import boto3 s3_resource = boto3.resource('s3') # 直接构造目标文件的Object对象 file_obj = s3_resource.Object('testunzipping', 'DataPump_10000838.zip') last_modified = file_obj.last_modified
基于client的实现
调用head_object接口获取文件元数据即可,无需遍历整个桶的文件列表:
import boto3 s3_client = boto3.client('s3') resp = s3_client.head_object(Bucket='testunzipping', Key='DataPump_10000838.zip') last_modified = resp['LastModified']
如果你已经调用过list_objects接口,返回的Contents列表中每个元素自带LastModified字段,可以直接从该字段取值,不需要额外发起请求。
2、调用s3.download_file下载文件时,是否可以直接提取该文件的last_modified属性?
download_file接口本身没有返回文件元数据的能力,无法在下载的同时直接获取该属性。可以通过以下两种方式实现相同需求:
- 先调用
head_object获取最后修改时间,再执行下载操作,两次接口请求的开销很小,不会影响执行效率 - 调用
get_object接口一次性获取文件元数据和文件流,自行写入本地,替代download_file的功能:
import boto3 s3_client = boto3.client('s3') resp = s3_client.get_object(Bucket='testunzipping', Key='DataPump_10000838.zip') # 直接获取最后修改时间 last_modified = resp['LastModified'] # 写入本地文件 with open('/tmp/DataPump_10000838.zip', 'wb') as f: f.write(resp['Body'].read())
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

