用boto3选择S3存储桶中倒数第二个文件

2024-10-06 09:50:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试选择S3存储桶的倒数第二个文件。最后修改的文件的代码没有问题

client = boto3.client(
    's3',
    # Hard coded strings as credentials, not recommended.
    aws_access_key_id=AWS_ACCESS_KEY,
    aws_secret_access_key=AWS_SECRET_KEY
)
#get S3 file
# navigate through dir
response = client.list_objects_v2(
    Bucket=_BUCKET_NAME, Prefix=_PREFIX_TEST)
allContent = response.get('Contents', [])
def lastFile():
    # get latest file path
    latestContent = max(allContent, key=lambda x: x['LastModified'])
    objectFile = latestContent["Key"]
    # get json file
    fileObj = client.get_object(
        Bucket=_BUCKET_NAME,
        Key=objectFile
    )
    fileData = fileObj['Body'].read().decode('utf-8')
    lastData = json.loads(fileData)
    return lastData
lastData = lastFile()

但是如何用第二个到最后一个修改过的文件来复制它呢


Tags: 文件keynameclientawsgets3bucket
1条回答
网友
1楼 · 发布于 2024-10-06 09:50:44

更改此行:

latestContent = max(allContent, key=lambda x: x['LastModified'])

secondLatestContent = sorted(
    allContent,
    key=lambda x: x['LastModified']
)[-2]

sorted()将按升序排列项目[-2]将使用列表中倒数第二个项目

您还可以使用此代码获取列表中最后一项的第n个:

def get_nth_to_last_file(n):
    # -1 * len(all_content) < n (int) <= len(all_content) to avoid an error
    nth_to_last_content = sorted(
        all_content,
        key=lambda x: x['LastModified']
    )[-1 * n]
    ...

相关问题 更多 >