如何在Minio中获取含时间戳子文件夹的目录下的完整数据?
MinIO遍历时间戳子文件夹文件并打印/下载解决方案
你现有的list_objects调用默认只返回指定前缀下的一级对象,不会递归拉取子目录内容,调整参数即可满足需求,以下是两种可行方案:
方案1:全量递归遍历(通用场景)
开启recursive=True参数直接拉取指定前缀下的所有对象,再过滤出路径中包含时间戳命名子文件夹的文件即可,适合目录层级不固定、对象量级不大的场景。
打印所有符合要求的文件路径
bucket_name = "sample" prefix = "samplefolder/sample1/" # 路径结尾加/避免匹配到前缀相似的其他目录 # 递归拉取所有前缀下的对象 objects = s3Client.list_objects(bucket_name, prefix=prefix, recursive=True) for obj in objects: # 拆分对象路径,仅判断文件夹层级是否含时间戳格式的名称 path_segments = obj.object_name.split('/') has_timestamp_folder = False # 遍历除文件名外的所有路径片段 for seg in path_segments[:-1]: # 可根据你的时间戳实际格式调整判断规则,以下为14位纯数字(YYYYMMDDHHMMSS)的示例规则 if len(seg) == 14 and seg.isdigit(): has_timestamp_folder = True break if has_timestamp_folder: print(obj.object_name)
下载符合要求的文件到本地
在上述if has_timestamp_folder判断块中添加下载逻辑即可:
import os # 本地存储根目录 local_save_root = "./minio_download_files" # 保持与MinIO一致的目录结构生成本地路径 local_file_path = os.path.join(local_save_root, obj.object_name) # 自动创建本地父目录 os.makedirs(os.path.dirname(local_file_path), exist_ok=True) # 调用下载接口 s3Client.fget_object( bucket_name=bucket_name, object_name=obj.object_name, file_path=local_file_path ) print(f"下载完成:{obj.object_name}")
方案2:逐层遍历筛选(大数量级场景)
如果时间戳子文件夹的层级固定(比如直接在samplefolder/sample1/的下一级),可以先筛选出符合要求的时间戳文件夹,再单独拉取每个文件夹下的内容,减少无效遍历。
bucket_name = "sample" prefix = "samplefolder/sample1/" # 先拉取一级子目录,不开启递归 top_level_objs = s3Client.list_objects(bucket_name, prefix=prefix, recursive=False) for obj in top_level_objs: # 判断是否为文件夹 if obj.is_dir: folder_name = obj.object_name.rstrip('/').split('/')[-1] # 按你的时间戳格式调整判断规则,示例为14位纯数字时间戳 if len(folder_name) == 14 and folder_name.isdigit(): print(f"匹配到时间戳文件夹:{folder_name}") # 拉取当前文件夹下的所有文件 sub_objs = s3Client.list_objects(bucket_name, prefix=obj.object_name, recursive=True) for sub_obj in sub_objs: # 此处可直接打印或下载,无需重复判断 print(sub_obj.object_name) # 下载逻辑同方案1
注意事项
- 时间戳判断规则可根据实际格式调整,例如适配
YYYY-MM-DD格式可以用正则匹配:import re; if re.match(r'^\d{4}-\d{2}-\d{2}$', seg): - Python版本的MinIO SDK的
list_objects接口默认已处理自动分页,大数量级对象无需额外配置分页逻辑 - 单文件体积较大时可使用
get_object接口流式下载,降低内存占用
内容的提问来源于stack exchange,提问作者Styleeeeez
相关产品推荐
相关产品推荐

