python jupyter перечисляет все файлы s3 с помощью команды ls - PullRequest
1 голос
/ 14 июля 2020

Я новичок в python и пытаюсь перечислить все файлы в каталоге s3. Я делал это раньше в блоках данных, используя

%sh ls path

. Я хочу понять, доступна ли какая-либо аналогичная команда для python - с использованием jupyter на основе экземпляра aws ec2.

Мне удалось сделать это с помощью boto3, но я хочу понять, есть ли более простой способ сделать это ** (аналогично пути% sh ls в блоках данных) **

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('data')

for my_bucket_object in my_bucket.objects.all():
    print(my_bucket_object)

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Вы можете использовать это, чтобы проанализировать некоторую полезную информацию (например, размер файла, дату последнего изменения):

import pandas as pd
import subprocess
​
def get_s3_files(bucket):
    files = subprocess.Popen(
        args=[f'aws s3 ls s3://{bucket} --recursive'],
        shell=True,
        stdout=subprocess.PIPE
    )
    df = pd.DataFrame(files.communicate()[0].split('\n'))

    df['file_last_modified'] = df[0].apply(
        lambda x: x[:20]
    )
    df['file_size'] = df[0].apply(
        lambda x: x[20:31]
    ).replace('', 0).astype(int)
​
    df['file_name'] = df[0].apply(
        lambda x: x[31:]
    )

    df = df[['file_name',
             'file_last_modified',
             'file_size',]]
​
    return df.sort_values('file_size')

df = get_s3_files(bucket='YOUR_BUCKET')
0 голосов
/ 14 июля 2020

Другой способ, который я могу придумать, - это позвонить bash в способ листинга через python

import os
os.system("aws s3 ls {} --recursive > file_Structure.txt".format("data"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...