jz2*_*z22 2 python sorting performance amazon-s3 boto3
此脚本获取S3存储桶中每个文件的last_modified属性,然后对它们进行排序并下载最新文件.然而,它已经花了很长时间,我想知道是否有办法提高性能.
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(name='mytestbucket')
allobjects = bucket.objects.filter()
a=[]
for obj in allobjects:
a.append(obj.last_modified)
a.sort()
b = a[-1]
for obj in allobjects:
if obj.last_modified == b:
c = obj.key
s3.Bucket('mytestbucket22').download_file(c, 'c:\latest.csv')
Run Code Online (Sandbox Code Playgroud)
是.这里有两件事可以优化:
sort如果你想获得max;你可以简单地使用:
import boto3
from operator import attrgetter
s3 = boto3.resource('s3')
bucket = s3.Bucket(name='mytestbucket')
allobjects = bucket.objects.filter()
c = max(allobjects,key=attrgetter('last_modified')).key
s3.Bucket('mytestbucket22').download_file(c, r'c:\latest.csv')Run Code Online (Sandbox Code Playgroud)
通过使用max我们将获得allobjects最大的元素key.在key这里,我们使用attrgetter('last_modified')它,因为元素x将被提取x.last_modified.
请注意,我们计算max(..)的allobjects本身.接下来我们得到key那个对象.
对列表进行排序在O(n log n)中工作,而计算最大值在O(n)中,因此这肯定会更快.此外,我们不需要再次搜索元素这一事实也会产生影响.最后它更优雅:我们只是声明我们想要根据某些内容找到最大对象key:它对程序员来说更具可读性.
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |