如何用Python f-string与正则表达式生成指定格式的文件路径?
问题修复方案
你的核心问题是把正则表达式直接当作文件路径拼接,而load_pickle只能接受具体的文件路径,无法识别正则模式。另外你拼接的路径本身存在错误(多了_user_token_sparse_df片段,和实际文件名不符),下面是具体修复方案:
方案1:使用glob快速匹配(推荐)
glob模块支持通配符匹配,比正则更简洁,适合文件名规则明确的场景:
import os import glob WKDIR = "/scratch/project_2004072/Nationalbiblioteket/dataframes" fprefix = "nikeY_docworks_lib_helsinki_fi_access_log_07_02_2021_lemmaMethod_stanza_" # 用通配符*匹配数字部分,生成所有符合条件的文件路径 pattern = os.path.join(WKDIR, f"{fprefix}user_tokens_df_*_BoWs.gz") matched_files = glob.glob(pattern) # 遍历加载每个符合条件的文件 for fpath in matched_files: try: df = load_pickle(fpath) # 这里添加加载后的DataFrame处理逻辑 except Exception as e: print(f"加载文件{fpath}失败: {e}") # 执行自定义错误处理操作
方案2:使用正则表达式精准筛选
如果需要严格验证文件名中的数字部分,可结合正则遍历目录文件:
import os import re WKDIR = "/scratch/project_2004072/Nationalbiblioteket/dataframes" fprefix = "nikeY_docworks_lib_helsinki_fi_access_log_07_02_2021_lemmaMethod_stanza_" # 定义正则模式:匹配前缀+user_tokens_df+数字+BoWs.gz regex_pattern = re.compile(f"{re.escape(fprefix)}user_tokens_df_(\d+)_BoWs.gz") matched_files = [] for filename in os.listdir(WKDIR): if regex_pattern.match(filename): matched_files.append(os.path.join(WKDIR, filename)) # 加载文件 for fpath in matched_files: try: df = load_pickle(fpath) # 这里添加加载后的DataFrame处理逻辑 except Exception as e: print(f"加载失败: {e}")
对你疑问的解答
你的理解有误:re.search()可以用来筛选符合规则的文件名,不是不能解决问题,而是你用错了场景。load_pickle确实需要具体路径,但你可以先通过正则/glob找到所有符合条件的具体路径,再逐个传入函数,而非把正则直接拼进路径让函数识别。
另外你原代码的路径拼接存在错误:fprefix本身末尾已有下划线,你又额外拼接了_user_token_sparse_df,导致生成的路径和实际文件名完全不匹配,这也是代码无效的核心原因之一。
内容的提问来源于stack exchange,提问作者farid
相关产品推荐
相关产品推荐

