如何从S3 Bucket的文件Key路径中提取文件名?
如何从S3对象Key中提取文件名?
你现有代码已能获取指定路径下最后修改文件的S3 Key(示例输出:folder/sub/2023-02-03_myfile.csv),以下几种方法可以提取其中的文件名部分2023-02-03_myfile.csv:
方法1:使用os.path.basename()(推荐)
这是最简洁通用的方式,Python的os模块专门处理路径相关操作,能自动截取最后一个斜杠后的内容:
import os # 获取最新文件的Key latest_key = sorted_contents[0].get('Key') # 提取文件名 file_name = os.path.basename(latest_key) print(file_name) # 输出:2023-02-03_myfile.csv
方法2:使用字符串split()方法
通过斜杠分割Key字符串,取最后一个元素即可:
latest_key = sorted_contents[0].get('Key') file_name = latest_key.split('/')[-1] print(file_name)
注意:如果Key以斜杠结尾(表示是S3目录),此方法会返回空字符串,建议先判断Key是否为文件路径。
方法3:使用pathlib.Path(Python 3.4+)
面向对象的路径处理方式,更符合现代Python风格:
from pathlib import Path latest_key = sorted_contents[0].get('Key') file_name = Path(latest_key).name print(file_name)
整合到原Lambda代码的完整示例
同时加入空路径异常处理,避免索引错误:
import boto3 import os from datetime import datetime print('Loading function') def lambda_handler(event, context): s3_client = boto3.client("s3") list_of_s3_objs = s3_client.list_objects_v2(Bucket="mybucket", Prefix="folder/sub/") # 检查路径下是否有文件 if 'Contents' not in list_of_s3_objs: print("指定路径下无文件") return # 按最后修改时间倒序排序,取最新文件 sorted_contents = sorted(list_of_s3_objs['Contents'], key=lambda d: d['LastModified'], reverse=True) latest_key = sorted_contents[0].get('Key') # 提取并打印文件名 file_name = os.path.basename(latest_key) print(file_name)
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

