使用Boto3 SDK列S3对象时如何直接获取无父文件夹前缀的纯文件名
结论
Boto3 没有提供直接获取 S3 对象纯文件名的原生属性,你必须自行对返回的对象 Key 做字符串处理。
S3 本质是键值对形式的对象存储,不存在传统文件系统的「文件夹」层级概念。你看到的
folder1/folder2/txt.json这类带斜杠的路径,本质就是 S3 对象的完整Key取值,Boto3 从 S3 API 拿到的返回结果里仅包含完整 Key 字段,不会单独拆分存储末尾的文件名部分。
推荐实现方案
不用手动调用 split 方法处理,直接用 Python 标准库的内置方法即可,还能自动适配多斜杠、末尾斜杠等边界场景:
- 用
os.path.basename处理:
import boto3 import os s3 = boto3.client('s3') response = s3.list_objects_v2(Bucket='替换为你的桶名', Prefix='folder1/folder2/') if 'Contents' in response: for obj in response['Contents']: # 直接获取纯文件名 file_name = os.path.basename(obj['Key'])
- Python 3.4+ 环境也可以用
pathlib处理:
from pathlib import Path file_name = Path(obj['Key']).name
内容的提问来源于stack exchange,提问作者Lya
相关产品推荐
相关产品推荐

