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

如何按文件名末尾数字升序筛选并获取当前目录指定扩展名文件?

问题与解决方案

需求说明

  • 遍历当前工作目录,收集符合Java_question_数字.扩展名命名规则的文件
  • 支持指定扩展名筛选(例如仅保留.txt或.dat文件)
  • 最终列表按文件名末尾的数字升序排列

原始代码雏形

if (language == "Java"):
    path = os.getcwd()
    print("path is: " + path)
    files = []
    for j in range(1, NUMBER_OF_JAVA_QUESTIONS_AVAILABLE + 1):
        for i in os.listdir(path):
            if os.path.isfile(os.path.join(path, i)) and 'Java_question_' in i:
                files.append(i)

优化实现方案

原始代码存在嵌套循环效率低、无扩展名筛选、排序逻辑缺失、依赖预设变量的问题,以下是更健壮的实现:

完整代码

import os
import re

def get_sorted_java_question_files(allowed_extensions=None):
    # 默认允许所有扩展名,指定后仅保留对应类型
    allowed_extensions = allowed_extensions or []
    allowed_extensions = [ext.lower() for ext in allowed_extensions]
    
    current_dir = os.getcwd()
    java_files = []
    
    # 正则规则:精准匹配Java_question_数字.扩展名格式,提取数字和扩展名
    pattern = re.compile(r'Java_question_(\d+)\.(\w+)')
    
    for filename in os.listdir(current_dir):
        file_path = os.path.join(current_dir, filename)
        if not os.path.isfile(file_path):
            continue
        
        match = pattern.match(filename)
        if not match:
            continue
        
        file_num = int(match.group(1))
        file_ext = f'.{match.group(2).lower()}'
        
        # 扩展名筛选:指定了允许类型时,检查是否符合
        if allowed_extensions and file_ext not in allowed_extensions:
            continue
        
        java_files.append((file_num, filename))
    
    # 按数字升序排序,提取最终文件名列表
    java_files.sort(key=lambda x: x[0])
    sorted_filenames = [item[1] for item in java_files]
    
    return sorted_filenames

# 使用示例
if __name__ == "__main__":
    language = "Java"
    if language == "Java":
        # 指定仅保留.txt和.dat文件
        sorted_files = get_sorted_java_question_files([".txt", ".dat"])
        print("路径:", os.getcwd())
        print("排序后的文件列表:", sorted_files)

关键说明

  • 正则匹配:用正则精准锁定命名格式,避免误匹配带多余后缀的文件(比如Java_question_123_test.txt)
  • 扩展名兼容:统一转为小写处理,避免.TXT和.txt这类大小写差异导致的筛选遗漏
  • 排序逻辑:通过存储(数字,文件名)元组,按数字排序后提取文件名,确保严格按末尾数字升序排列
  • 灵活复用:函数支持自定义允许的扩展名列表,也可直接调用获取所有符合命名规则的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:12:56