Python中基于子串提取文件名作为变量的实现方案
Python中基于子串提取文件名作为变量的实现方案
嗨,我来帮你搞定这个需求!咱们一步步来,既简单又能精准实现你要的效果。
首先,你已经通过os.listdir()拿到了目录里的文件列表,接下来就按你的两个要求来处理:
第一步:筛选符合条件的文件名
我们需要找出所有以wf开头、以_param.py结尾的文件,用列表推导式就能轻松实现:
import os # 你已有的代码 dir_contents = os.listdir('.') # 筛选目标文件 target_files = [f for f in dir_contents if f.startswith('wf') and f.endswith('_param.py')]
第二步:提取目标部分作为变量
拿到符合条件的文件列表后,我们可以提取_param.py之前的内容。这里有两种常用方法,你可以根据自己的习惯选:
方法一:用字符串分割(简单直接)
用rsplit()从右边只分割一次,这样即使文件名里意外出现多个_param.py(当然你的场景里应该不会),也只会取最后一段之前的内容,完全符合需求:
if target_files: # 取第一个符合条件的文件(如果确定只有一个的话) target_file = target_files[0] # 提取核心部分 result_var = target_file.rsplit('_param.py', 1)[0] print(result_var) # 输出: wf_list_dir else: print("没找到符合条件的文件哦!")
方法二:用正则表达式(灵活通用)
如果之后文件名规则可能变化,正则表达式会更灵活。我们可以写一个精准匹配的正则,直接提取我们要的部分:
import re pattern = r'^(wf.*?)_param\.py$' result_var = None for f in dir_contents: match = re.match(pattern, f) if match: result_var = match.group(1) print(result_var) # 输出: wf_list_dir break # 找到第一个就停止,不用继续循环 if not result_var: print("没找到符合条件的文件哦!")
这个正则的意思是:匹配以wf开头,以_param.py结尾的字符串,中间的部分就是我们要提取的内容,用group(1)就能拿到。
小提醒
- 如果目录里可能有多个符合条件的文件,你可以循环遍历
target_files列表,逐个处理每个文件 - 建议加上空列表判断,避免找不到文件时出现索引错误
备注:内容来源于stack exchange,提问作者nmr
相关产品推荐
相关产品推荐

