如何从S3路径列表中提取日期数字并生成新列表?
从S3路径列表提取日期数字的实现方法
给定如下格式的列表:
['s3://dx-datalake-modl-svil-3075-bucket-layer/DX/WDOS/VV_SALDI_TITOLO/c_acr=GE/c_giorno_t=20201231/', 's3://dx-datalake-modl-svil-3075-bucket-layer/DX/WDOS/VV_SALDI_TITOLO/c_acr=GE/c_giorno_t=20230531/']需要从中仅提取数字
20230531和20201231,并放入新列表,最终得到['20230531','20201231']。
方法1:字符串分割法
利用路径中固定标识c_giorno_t=做分割,直接提取目标内容:
s3_paths = ['s3://dx-datalake-modl-svil-3075-bucket-layer/DX/WDOS/VV_SALDI_TITOLO/c_acr=GE/c_giorno_t=20201231/', 's3://dx-datalake-modl-svil-3075-bucket-layer/DX/WDOS/VV_SALDI_TITOLO/c_acr=GE/c_giorno_t=20230531/'] result = [] for path in s3_paths: # 先按'c_giorno_t='拆分取后半段,再按'/'拆分取第一个元素 date_str = path.split('c_giorno_t=')[1].split('/')[0] result.append(date_str) # 反转列表得到目标顺序 result.reverse() print(result) # 输出: ['20230531', '20201231']
方法2:正则表达式法
通过正则匹配8位数字的日期格式,适配更多类似路径场景:
import re s3_paths = ['s3://dx-datalake-modl-svil-3075-bucket-layer/DX/WDOS/VV_SALDI_TITOLO/c_acr=GE/c_giorno_t=20201231/', 's3://dx-datalake-modl-svil-3075-bucket-layer/DX/WDOS/VV_SALDI_TITOLO/c_acr=GE/c_giorno_t=20230531/'] # 匹配连续8位数字的正则表达式 pattern = re.compile(r'\d{8}') result = [pattern.search(path).group() for path in s3_paths] # 反转列表得到目标顺序 result.reverse() print(result) # 输出: ['20230531', '20201231']
内容的提问来源于stack exchange,提问作者Antony Salvo
相关产品推荐
相关产品推荐

