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

将Shell的find逻辑转为Python脚本并过滤指定.vrlp文件

问题解决:过滤基础.vrlp文件并将Shell提取逻辑转为Python

一、过滤基础.vrlp文件的Shell实现优化

原脚本用于遍历db/test/vs目录下所有.vrlp文件,现需仅保留无变体后缀的基础文件(即文件名仅以.vrlp结尾,无.ce.template.a这类中间变体标识)。

优化后的Shell命令

# 方式1:反向排除带变体后缀的文件
find db/test/vs -type f -name "*.vrlp" | grep -v "\.[a-z0-9]\+\.vrlp$"

# 方式2:直接正则匹配基础文件
find db/test/vs -type f -regex ".*/[^.]\+\.vrlp$"

逻辑说明

  • find db/test/vs -type f -name "*.vrlp":遍历目标目录下所有.vrlp类型文件
  • grep -v "\.[a-z0-9]\+\.vrlp$":反向匹配排除文件名最后一个.前包含小写字母/数字后缀的文件(如xxx.ce.template.a.vrlp会被排除)
  • 正则版本-regex ".*/[^.]\+\.vrlp$":直接匹配路径最后一段为「无点字符+.vrlp」的文件,精准锁定基础文件

二、原Shell提取TEST_CASE与CLASS的命令功能解析

假设原Shell命令为以下常见实现:

提取TEST_CASE的命令

# 方式1:rev+cut组合
TEST_CASE=$(echo "$file_path" | rev | cut -d'.' -f2 | rev)

# 方式2:sed正则匹配
TEST_CASE=$(echo "$file_path" | sed -E 's/.*\/([^.]+)\.vrlp/\1/')

提取CLASS的命令

CLASS=$(echo "$file_path" | rev | cut -d'/' -f2 | rev)

功能拆解

  1. TEST_CASE提取

    • rev+cut组合:先反转字符串,以.为分隔符取第2个字段,再反转回来,最终得到.vrlp前的文件名主体(如db/test/vs/LoginTest.vrlp提取出LoginTest)
    • sed正则:匹配路径中最后一段/后的内容,捕获.vrlp前的部分,直接提取文件名主体
  2. CLASS提取

    • rev+cut组合:先反转字符串,以/为分隔符取第2个字段,再反转回来,最终得到文件所在的父目录名(如db/test/vs/LoginTest.vrlp提取出vs)

三、Python实现对应逻辑

1. 过滤基础.vrlp文件

import os

target_dir = "db/test/vs"
base_vrlp_files = []

# 遍历目录筛选符合条件的文件
for root, _, files in os.walk(target_dir):
    for file in files:
        if file.endswith(".vrlp") and "." not in file[:-5]:
            # file[:-5] 去掉末尾的.vrlp,检查剩余部分无点号,确保是基础文件
            base_vrlp_files.append(os.path.join(root, file))

# 输出结果
for f in base_vrlp_files:
    print(f)

2. 提取TEST_CASE与CLASS

def extract_test_info(file_path):
    # 提取TEST_CASE:去掉.vrlp后缀的文件名主体
    file_name = os.path.basename(file_path)
    test_case = os.path.splitext(file_name)[0]
    
    # 提取CLASS:文件所在的父目录名
    class_name = os.path.basename(os.path.dirname(file_path))
    
    return test_case, class_name

# 示例调用
for f in base_vrlp_files:
    tc, cls = extract_test_info(f)
    print(f"TEST_CASE: {tc}, CLASS: {cls}")

逻辑说明

  • 过滤部分:通过file.endswith(".vrlp")锁定目标文件,file[:-5]移除后缀后检查无点号,排除带变体后缀的文件
  • TEST_CASE提取:用os.path.splitext直接分割文件名与后缀,简洁获取主体部分
  • CLASS提取:用os.path.dirname获取文件所在目录,再用os.path.basename取目录名,完全对应原Shell的父目录提取逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:10:21