如何用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
相关产品推荐
相关产品推荐

