Как перебрать s3-файлы и записать все txt-файлы в csv-файл, разделенные датой его запуска (год) - PullRequest
0 голосов
/ 15 января 2020

По сути, я хочу пройтись по корзине и использовать структуру папок, чтобы классифицировать каждый файл по дате его выполнения (год).

Итак, у меня есть корзина s3, путь которой выглядит следующим образом:

file/archive/run=2017-10-07-06-13-21/folder_paths/version=1-0-0/part-00000-b.txt

file/archive/run=2018-11-07-06-13-21/folder_paths/version=1-0-0/part-00000-c.txt

В папке архива есть даты выполнения.

В конечном счете, я хочу иметь возможность перебирать файлы и писать part-000 .... txt файлы в CSV-файл по дате (год). Поэтому я хочу, чтобы все файлы .txt, которые выполняются, были в 2018 году в одном файле CSV, все файлы .txt в 2017 году и все файлы .txt в 2019 году.

Я новичок в boto3 и s3, поэтому я Я очень запутался в том, как go сделать это:

Вот мой код:

#Import boto3 module
import boto3
import logging
from botocore.exceptions import ClientError

#This is to List existing Buckets for the AWS account

PREFIX = 'shredded/'

#Create a session to your AWS account

s3client = boto3.client(
    's3',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    region_name=REGION_NAME,
)


bucket = 'mybucket'
startAfter = '2020-00-00-00-00-00'

s3objects= s3client.list_objects_v2(Bucket=bucket, StartAfter=startAfter )
for object in s3objects['Contents']:
    print(object['Key'])

Любые предложения или идеи помогут.

1 Ответ

1 голос
/ 15 января 2020

Один из подходов к этому - что-то вроде этого:

2017_files = [object for object in s3objects['Contents'] if 'run=2017' in object]
2018_files = [object for object in s3objects['Contents'] if 'run=2018' in object]
2019_files = [object for object in s3objects['Contents'] if 'run=2019' in object]

Это проверит все элементы в массиве s3objects['Contents'], соответствует ли оно строковому условию run={year}.

Таким образом, каждая из переменных, т. Е. 2017_files, 2018_files & 2019_files, будет содержать все соответствующие пути.

Оттуда вы можете разбить строку на / и получить последнее разбиение, которое будет part-00000-b.txt в качестве примера.

Чтобы записать в .csv, посмотрите библиотеку Python csv (https://docs.python.org/3/library/csv.html) и как ее использовать Это довольно solid.

Отпишитесь с тем, как вы go!

...