Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从s3存储桶获取一天以前的文件路径_Python 3.x_Amazon Web Services_Amazon S3_Boto3 - Fatal编程技术网

Python 3.x 从s3存储桶获取一天以前的文件路径

Python 3.x 从s3存储桶获取一天以前的文件路径,python-3.x,amazon-web-services,amazon-s3,boto3,Python 3.x,Amazon Web Services,Amazon S3,Boto3,我在一个s3存储桶中有一堆文件,前缀如下所示。我想连接boto3并创建一个列表,其中包含桶中日期部分早于一天的所有前缀。例如,如果当前日期为 '20191226_1213' 然后我想创建一个类似下面所需输出的列表。有人能建议如何使用boto3吗 例如: 's3://basepath/20191225_1217/' 's3://basepath/20191224_1012/' 's3://basepath/20191222_1114/' 期望输出: ['s3://basepath/201912

我在一个s3存储桶中有一堆文件,前缀如下所示。我想连接boto3并创建一个列表,其中包含桶中日期部分早于一天的所有前缀。例如,如果当前日期为

'20191226_1213'
然后我想创建一个类似下面所需输出的列表。有人能建议如何使用boto3吗

例如:

's3://basepath/20191225_1217/'
's3://basepath/20191224_1012/'
's3://basepath/20191222_1114/'
期望输出:

['s3://basepath/20191224_1012/','s3://basepath/20191222_1114/']
更新:

很抱歉,我之前没有提供更好的示例,但我的实际文件夹路径实际上如下所示:

's3://basepath/folder1/20191225_1217/'

下面是一些代码,用于提取给定bucket根中的公共前缀,并根据“一天前”检查它们的名称:

导入boto3
导入日期时间
s3\u client=boto3.client('s3'))
now=datetime.datetime.now()
比较时间=现在-datetime.timedelta(天=1)
比较时间字符串=比较时间.strftime(“%Y%m%d\u%H%m”)#例如20191225_0623
response=s3\u client.list\u objects\u v2(Bucket='my-Bucket',分隔符='/'))
对于响应中的前缀_dict['CommonPrefixes']:
prefix=prefix_dict['prefix']
如果前缀
但是,请注意时间定义。根据您运行代码的位置,时区可能(也可能不)设置为UTC。这可能与在文件夹名称上生成这些日期和时间的内容相匹配,也可能不匹配

更新:这是另一个版本,它在密钥的任何部分查找日期字符串,然后将密钥输出到文件夹名称

导入boto3
导入日期时间
进口稀土
s3\u client=boto3.client('s3'))
now=datetime.datetime.now()
比较时间=现在-datetime.timedelta(天=1)
比较时间字符串=比较时间.strftime(“%Y%m%d\u%H%m”)#例如20191225_0623
response=s3\u client.list\u objects\u v2(Bucket='my-Bucket')
pattern=re.compile('/([\d]{8}[\d]{4})/')#如/201912250623/
旧对象=[]
对于响应中的对象['Contents']:
key=object['key']
结果=模式。搜索(键)
如果结果和结果组(1)<比较\u时间\u字符串:
旧的_objects.append(键[:result.end()])
打印(旧对象)

以下是一些代码,用于提取给定bucket根中的公共前缀,并根据“一天前”检查它们的名称:

导入boto3
导入日期时间
s3\u client=boto3.client('s3'))
now=datetime.datetime.now()
比较时间=现在-datetime.timedelta(天=1)
比较时间字符串=比较时间.strftime(“%Y%m%d\u%H%m”)#例如20191225_0623
response=s3\u client.list\u objects\u v2(Bucket='my-Bucket',分隔符='/'))
对于响应中的前缀_dict['CommonPrefixes']:
prefix=prefix_dict['prefix']
如果前缀
但是,请注意时间定义。根据您运行代码的位置,时区可能(也可能不)设置为UTC。这可能与在文件夹名称上生成这些日期和时间的内容相匹配,也可能不匹配

更新:这是另一个版本,它在密钥的任何部分查找日期字符串,然后将密钥输出到文件夹名称

导入boto3
导入日期时间
进口稀土
s3\u client=boto3.client('s3'))
now=datetime.datetime.now()
比较时间=现在-datetime.timedelta(天=1)
比较时间字符串=比较时间.strftime(“%Y%m%d\u%H%m”)#例如20191225_0623
response=s3\u client.list\u objects\u v2(Bucket='my-Bucket')
pattern=re.compile('/([\d]{8}[\d]{4})/')#如/201912250623/
旧对象=[]
对于响应中的对象['Contents']:
key=object['key']
结果=模式。搜索(键)
如果结果和结果组(1)<比较\u时间\u字符串:
旧的_objects.append(键[:result.end()])
打印(旧对象)

如果需要,您也可以从AWS CLI执行此操作。如果有兴趣,请告诉我。如果需要,您也可以从AWS CLI执行此操作。如果有兴趣,请告诉我。很抱歉,我没有早点给你回复,谢谢你的解决方案。除非我忘了提到我的文件路径中有额外的子目录,否则它可以工作。因此,当我运行您的解决方案时,它将返回所有前缀,这些前缀在第一个“/”之前经过一个分隔符过滤。我已经用一个例子更新了上面的帖子。你知道我如何解决这个问题吗?我添加了另一个示例答案,可以在钥匙的任何部分找到日期。这实际上只是Python中字符串的操作,没有太多针对AmazonS3的内容。很抱歉,我没有尽快回复您,谢谢您提供的解决方案。除非我忘了提到我的文件路径中有额外的子目录,否则它可以工作。因此,当我运行您的解决方案时,它将返回所有前缀,这些前缀在第一个“/”之前经过一个分隔符过滤。我已经用一个例子更新了上面的帖子。你知道我如何解决这个问题吗?我添加了另一个示例答案,可以在钥匙的任何部分找到日期。这实际上只是Python中字符串的操作,没有太多特定于AmazonS3的内容。