Выберите второй и последний файл в корзине S3 с помощью boto3 - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь выбрать второй или последний файл корзины 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()

Но как скопировать это со второго до последнего измененного файла?

1 Ответ

2 голосов
/ 21 апреля 2020

Измените эту строку:

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]
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...