You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 14:15:02