Python 气流:使用通配符从S3下载最新文件
要求:从s3下载最新文件,即当前文件 s3中的示例文件Python 气流:使用通配符从S3下载最新文件,python,python-3.x,boto3,airflow,Python,Python 3.x,Boto3,Airflow,要求:从s3下载最新文件,即当前文件 s3中的示例文件 bucketname/2020/09/reporting_2020_09_20200902000335.zip bucketname/2020/09/reporting_2020_09_20200901000027.zip 当我通过s3_src_键作为/2020/09/reporting_2020_09_20200902时,在以下一种情况下不起作用 代码: 低于一的工作很好 import os bucket = 'bucketname'
bucketname/2020/09/reporting_2020_09_20200902000335.zip
bucketname/2020/09/reporting_2020_09_20200901000027.zip
当我通过s3_src_键作为/2020/09/reporting_2020_09_20200902
时,在以下一种情况下不起作用
代码:
低于一的工作很好
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中使用通配符的帮助。您可以列出与给定模式匹配的对象,但随后需要编写代码来确定其中哪一个是最新的
这是您需要的我想您应该迭代存储桶中的对象,按从文件名中提取的日期对它们进行排序,然后选择第一个。如何定义“最新文件”?您是基于
LastModified
日期,该日期指示对象存储在Amazon S3中的时间,还是基于对文件名的解释?如果您使用的是文件名,那么在给定文件夹名称和文件名(键)的情况下,查找“最新文件”的规则是什么?它是否总是说报告
?此外,为什么年+月会列出3次(2020/09
、2020\u 09
和202009
)?如果他们彼此不同意怎么办?这就是供应商发送文件的方式:)。。是的,我得到了报告文件,基于文件名示例,这里的报告文件
是今天的文件。我也可以使用LastModifiedDate,但我认为带有文件名的前缀更容易
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)