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

如何使用glob匹配指定编号前缀文件,避免file1与file10被同时匹配

问题根因

你使用的*通配符匹配规则过于宽松,file1*会命中所有以file1开头的文件名,file10满足该规则因此会被误匹配。我们只要限定数字后缀的匹配规则即可解决问题。


方案1:循环匹配当前序号对应文件(适配原有代码逻辑)

调整匹配规则,仅匹配两类文件:精确匹配当前序号的主文件、当前序号加下划线开头的衍生文件,同时用os.path.join做路径拼接避免跨平台适配问题:

import glob
import os

for iter in range(number_of_files):
    current_num = iter + 1
    # 匹配主文件 fileN
    main_file = glob.glob(os.path.join(file_directory, f"file{current_num}"))
    # 匹配衍生文件 fileN_xxx
    sub_files = glob.glob(os.path.join(file_directory, f"file{current_num}_*"))
    # 合并结果并按衍生序号排序
    find_matching_files = main_file + sorted(sub_files, key=lambda x: int(x.rsplit('_', 1)[-1]))

方案2:一次性全量匹配后自定义排序(无需提前知道文件总数)

如果不想提前确认number_of_files的数值,可以一次性捞出所有符合命名规则的文件,通过自定义排序规则直接得到目标遍历顺序:

import glob
import os

all_files = glob.glob(os.path.join(file_directory, "file*"))

def get_sort_key(file_path):
    # 提取文件名去掉前缀file后的部分
    num_part = os.path.basename(file_path)[4:]
    if '_' in num_part:
        main_num, sub_num = num_part.split('_', 1)
        return (int(main_num), int(sub_num))
    return (int(num_part), 0)

# 排序后的列表顺序完全符合要求:file1、file1_1、file2、file2_1……
sorted_files = sorted(all_files, key=get_sort_key)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:02