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

PHP如何扫描目录筛选文件名在20.jpg到40.jpg之间的文件?

如何用scandir只筛选20.jpg到40.jpg之间的文件

当然有简便的方法啦!虽然scandir本身没有内置的范围筛选参数,但我们可以在获取目录内容的同时,直接加入过滤逻辑,不用先拿到所有文件再二次处理,效率也很高。

下面分两种常见语言给你示例:

PHP 实现

我们可以把文件判断和范围筛选合并到一个回调里,减少遍历次数:

$dir = '/path/to/your/target-dir';
$targetFiles = array_filter(scandir($dir), function($item) use ($dir) {
    // 先排除.、..和目录项
    if ($item === '.' || $item === '..' || !is_file($dir . DIRECTORY_SEPARATOR . $item)) {
        return false;
    }
    // 匹配以数字开头、.jpg结尾的文件名
    preg_match('/^(\d+)\.jpg$/', $item, $matches);
    // 判断数字是否在20-40之间
    return isset($matches[1]) && ((int)$matches[1] >= 20 && (int)$matches[1] <= 40);
});

// 输出结果
print_r($targetFiles);

Python 实现

Python的scandir(3.5+自带,也可以用os.scandir)可以直接遍历目录条目,边遍历边筛选:

import os

dir_path = '/path/to/your/target-dir'
target_files = []

for entry in os.scandir(dir_path):
    if entry.is_file():
        filename = entry.name
        # 先确认是jpg文件
        if filename.endswith('.jpg'):
            # 提取文件名里的数字部分
            try:
                file_num = int(filename.split('.')[0])
                # 判断范围
                if 20 <= file_num <= 40:
                    target_files.append(filename)
            except ValueError:
                # 文件名不是纯数字开头的话跳过
                continue

print(target_files)

小提示

  • 两种实现都是一次遍历完成所有筛选,比先获取全量文件再过滤更高效,尤其是目录文件很多的时候。
  • 正则/字符串分割的方式能精准匹配你要的文件名格式,避免把比如120.jpg或者abc25.jpg这类不符合规则的文件误选进来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:06