如何使用Python的aioboto3或boto3仅获取S3中的有效文件路径
S3路径筛选解决方案
问题根因
- 现有代码的逻辑是提取所有S3对象Key的父目录路径存入集合,最终返回的全是目录路径,和筛选文件路径的需求完全相反
- S3本身不存在真实的层级文件夹结构,你看到的空文件夹本质是Key以
/结尾的0字节占位对象
修正代码
不需要收集父目录,直接筛选符合文件特征的Key即可:
file_paths = set() result = await self.s3_client.list_objects(Bucket=bucket, Prefix=prefix) objects = result.get("Contents", []) try: for obj in objects: key = obj["Key"] # 排除以/结尾的目录占位对象,仅保留真实文件路径 if not key.endswith("/"): file_paths.add(key) except Exception as exc: print(f"Getting objects with prefix: {prefix} failed") raise exc
可选补充校验
如果需要进一步排除无后缀的特殊命名文件,可以追加判断条件,确认Key的最后一段路径包含文件名特征:
import os # 在上述if判断中追加条件 if not key.endswith("/") and "." in os.path.basename(key): file_paths.add(key)
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

