【发布时间】:2020-09-02 21:03:15
【问题描述】:
要求:从 s3 下载最新文件,即当前文件
s3 中的示例文件
bucketname/2020/09/reporting_2020_09_20200902000335.zip
bucketname/2020/09/reporting_2020_09_20200901000027.zip
当我将 s3_src_key 作为/2020/09/reporting_2020_09_20200902 传递时不适用于以下一个
代码:
with tempfile.NamedTemporaryFile('r') as f_source, tempfile.NamedTemporaryFile('w') as f_target:
s3_client.download_file(self.s3_src_bucket, self.s3_src_key, f_source.name)
下面一个可以正常工作
import os
bucket = 'bucketname'
key = '/2020/09/reporting_2020_09_20200902'
s3_resource = boto3.resource('s3')
my_bucket = s3_resource.Bucket(bucket)
objects = my_bucket.objects.filter(Prefix=key)
for obj in objects:
path, filename = os.path.split(obj.key)
my_bucket.download_file(obj.key, filename)
我需要帮助如何在 Airflow 中使用通配符
【问题讨论】:
-
我猜你会遍历存储桶中的对象,按从文件名中提取的日期对它们进行排序,然后选择第一个。
-
如何定义“最新文件”?您是基于指示对象何时存储在 Amazon S3 中的
LastModified日期,还是基于对文件名的解释?如果您使用文件名,在给定文件夹名称和文件名(键)的情况下,查找“最新文件”的规则是什么?它会一直说reporting_吗?另外,为什么年+月列出了 3 次(2020/09、2020_09和202009)?如果他们意见不一致怎么办? -
这就是供应商发送文件的方式:) .. 是的,我得到了reporting_ 文件,基于此处的文件名示例
reporting_2020_09_20200902是今天的文件。我也可以使用 LastModifiedDate 但我认为前缀是文件名比较容易
标签: python python-3.x boto3 airflow