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

如何列出目录下所有文件并忽略年份早于指定值的文件夹?

需求实现方案

以下分别提供Python和Shell两种实现方式,覆盖文件列表生成和二次过滤全流程。

前置说明

默认你的年份文件夹名称中包含4位数字年份,若命名规则特殊仅需调整年份提取逻辑即可。


Python 实现(推荐用于数据集构建场景)

步骤1:生成并存储过滤后的文件列表

该步骤会自动排除所有年份早于指定阈值的文件夹,仅保留符合要求的文件路径:

from pathlib import Path
import re

# 自定义配置
ROOT_DIR = Path("/替换为你的/数据集根目录路径")
MIN_REQUIRED_YEAR = 2018  # 早于该年份的文件夹全部排除
SAVE_LIST_PATH = "./filtered_file_list.txt"

valid_file_paths = []

# 遍历根目录下的一级子文件夹
for year_folder in ROOT_DIR.iterdir():
    if not year_folder.is_dir():
        continue
    
    # 提取文件夹名中的4位年份,适配带前缀/后缀的文件夹名(如data_2019、2020_raw)
    year_match = re.search(r"\d{4}", year_folder.name)
    if not year_match:
        # 无有效年份的文件夹默认跳过,如有保留需求可删除该判断
        continue
    folder_year = int(year_match.group())
    
    if folder_year < MIN_REQUIRED_YEAR:
        continue
    
    # 递归遍历该年份文件夹下的所有文件
    for file in year_folder.rglob("*"):
        if file.is_file():
            # 可根据需求存绝对路径/相对路径,这里存绝对路径
            valid_file_paths.append(str(file.resolve()))

# 持久化存储文件列表
with open(SAVE_LIST_PATH, "w", encoding="utf-8") as f:
    for path in valid_file_paths:
        f.write(f"{path}\n")

步骤2:读取文件时二次过滤

后续读取文件列表时可按文件名、后缀等规则二次过滤,例如仅保留图像文件:

from pathlib import Path

SAVE_LIST_PATH = "./filtered_file_list.txt"
# 自定义二次过滤规则:仅保留指定后缀的文件
ALLOWED_SUFFIX = {".jpg", ".jpeg", ".png", ".bmp"}

# 读取预先生成的文件列表
with open(SAVE_LIST_PATH, "r", encoding="utf-8") as f:
    file_list = [line.strip() for line in f if line.strip()]

# 二次过滤
final_file_list = [
    path for path in file_list 
    if Path(path).suffix.lower() in ALLOWED_SUFFIX
]

# 后续使用final_file_list构建数据集即可

Shell 实现(适合快速生成文件列表)

如果仅需要快速生成过滤后的文件列表,可直接使用Shell命令:

# 自定义配置
ROOT_DIR="/替换为你的/数据集根目录路径"
MIN_REQUIRED_YEAR=2018
SAVE_LIST_PATH="./filtered_file_list.txt"

find "$ROOT_DIR" -mindepth 1 -maxdepth 1 -type d | while read year_folder; do
    folder_name=$(basename "$year_folder")
    folder_year=$(echo "$folder_name" | grep -oE '[0-9]{4}' | head -n 1)
    # 过滤无效年份或早于阈值的文件夹
    if [ -z "$folder_year" ] || [ "$folder_year" -lt "$MIN_REQUIRED_YEAR" ]; then
        continue
    fi
    # 递归输出所有文件路径
    find "$year_folder" -type f
done > "$SAVE_LIST_PATH"

可选优化项

  • 若文件总量极大,可改用生成器存储路径,避免占满内存
  • 可将年份阈值、二次过滤规则等统一抽成配置项,后续调整无需修改核心逻辑
  • 存储文件列表时可同步写入文件大小、修改时间等元信息,方便后续数据校验

内容的提问来源于stack exchange,提问作者DadVlad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:03