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

如何用Python从带点的文件夹名提取首段名称及代码修复

问题:提取特定格式文件夹名中的目标字段

原有可用代码(CODE 1)

当文件夹名为google_com_uk、google_com_usa、google_com_de这类格式时,以下代码可提取返回com:

def services_list(root, details):
    dir = root + details
    list = glob.glob("%s/google_*" %(dir))
    no_prefix = {x.replace(f"{dir}/google_", "") for x in list}
    no_suffix = {re.sub('_.*$', '', x) for x in no_prefix}
    return no_suffix

需求与问题代码(CODE 2)

现在需要处理uk.google.com、usa.google.com、de.google.com这类格式的文件夹,期望返回uk、usa、de这类前缀,但当前修改后的代码无法得到预期结果:

def services_list(root, details):
    dir = root + details
    list = glob.glob("%s/*.google.com" %(dir))
    no_prefix = {x.replace(f"{dir}/*.google.com", "") for x in list}
    no_suffix = {re.sub('_.*$', '', x) for x in no_prefix}
    return no_suffix

问题分析与修正代码

CODE 2的核心问题是replace方法中误用了glob的通配符字符串*.google.com——实际匹配到的是具体完整路径(比如/root/details/uk.google.com),通配符无法匹配真实字符串,导致替换完全无效。

修正后的代码可以通过提取文件名再分割的方式实现需求:

import glob
import os

def services_list(root, details):
    dir_path = root + details
    folder_paths = glob.glob("%s/*.google.com" % dir_path)
    # 提取每个路径的文件名,再取第一个点分隔的部分
    target_values = {os.path.basename(path).split('.')[0] for path in folder_paths}
    return target_values

可选的严谨性优化

如果需要严格校验文件夹格式,确保只匹配xxx.google.com结构的目录,可以改用正则匹配:

import glob
import os
import re

def services_list(root, details):
    dir_path = root + details
    folder_paths = glob.glob("%s/*.google.com" % dir_path)
    target_values = set()
    for path in folder_paths:
        filename = os.path.basename(path)
        match = re.match(r'(.*?)\.google\.com', filename)
        if match:
            target_values.add(match.group(1))
    return target_values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:43:10