我有一个具有这种结构的 S3 存储桶:
data/date=1900-01-01-00/id=abc123def/file1.parquet
data/date=1900-01-01-00/id=ghi456jkl/file2.parquet
data/date=2021-07-11-00/id=mno789pqr/file3.parquet
data/date=2021-07-11-00/id=stu123vwy/file4.parquet
.
.
.
文件夹中的文件date=1900-01-01-00
是虚拟文件,其他是来自数据采集的“真实文件”。
我想创建一个S3Objects
只包含第一个虚拟文件和第一个真实文件的列表。
这是我写的代码:
def __data_list(self):
datastore_bucket = s3_resource.Bucket(S3_DATASTORE_BUCKET)
len_dummy_file = len(
list(
datastore_bucket.objects.filter(
Prefix="data/date=1900-01-01-00/"
)
)
)
data_list = list(
datastore_bucket.objects.filter(
Prefix="data/"
).limit(len_dummy_file + 1)
)
return [data_list[0], data_list[-1]]
我不知道虚拟文件的数量,我可能有数千个真实文件,所以读取所有存储桶可能需要很多时间,我想避免它。
有谁知道创建列表的更好方法?
您可以对Key
从对象列表返回的内容执行逻辑:
first_dummy = None
first_real = None
for object in s3_resource.Bucket(BUCKET_NAME).objects.filter(Prefix='data/'):
if not first_dummy and 'date=1900-01-01-00' in object.key:
first_dummy = object.key
elif not first_real and 'date=1900-01-01-00' not in object.key:
first_real = object.key
if first_dummy and first_real:
break
print(first_dummy, first_real)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句