如何访问 AWS s3 存储桶中的子文件夹(对象)并将其保存到 python 的列表中?



这是我的 s3 存储桶

s3.Bucket(name='external')

我正在使用 boto3.资源方法:

s3 = boto3.resource(
's3',
region_name='ap-southeast-1',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)

S3文件夹结构如下:

externalproduct2018abc.csv
externalproduct2019abc.csv
externalbom2018csd.csv
externalbom2019zyc.csv

请注意,2018年,2019年都是产品内部和BOM。

我试过这样做:


bucket = s3.Bucket(bucket)
print(bucket)
result = bucket.meta.client.list_objects(Bucket=bucket.name,
Delimiter='/')
print(result)                                    
for o in result.get('CommonPrefixes'):
print(o.get('Prefix'))

这只给我:

product
bom

我实际需要的是年份列表:

2018
2019
2018
2019

并存储它们两个单独的列表产品和物料清单

Product =['2018','2019']
Bom = ['2018','2019']

很少有方法可以做到这一点。一种方式如下所示。

基于以下示例,并假设文件夹结构是固定的:

externalbom2017csd.csv
externalbom2018csd.csv
externalbom2019zyc.csv
externalproduct2018abc.csv
externalproduct2019abc.csv
externalproduct2020abc.csv

以下 python 脚本可以工作:

import boto3
from collections import defaultdict
session = boto3.session.Session(profile_name='<profile-name>')
bucket = session.resource('s3').Bucket('external')
key_year = defaultdict(set)
for obj in bucket.objects.all():
key_split = obj.key.split('\')
key_year[key_split[1]].add(key_split[2])
for k in key_year:
print(k, key_year[k])

在脚本中,defaultdictset用于确保存储唯一的年份。输出将是:

bom {'2017', '2019', '2018'}
product {'2020', '2018', '2019'}

相关内容

  • 没有找到相关文章

最新更新