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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:23:16