如何列出目录下所有文件并忽略年份早于指定值的文件夹?
需求实现方案
以下分别提供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
相关产品推荐
相关产品推荐

