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

如何使用正则匹配打开文件名每月变动的.mnu文件并读取内容

Python 正则匹配动态文件名读取.mnu文件解决方案

open()方法本身不支持通配符解析,通配符是shell层的功能,你可以通过遍历目录+正则匹配的方式定位到目标.mnu文件,具体实现如下:

基础实现(匹配所有.mnu后缀文件)

适用于目录下只有一个.mnu文件的场景:

import os
import re

# 替换为你的.mnu文件所在目录路径,./ 代表当前脚本所在目录
mnu_dir = "./"
# 匹配所有以.mnu为后缀的文件,忽略大小写
file_pattern = re.compile(r".*\.mnu$", re.IGNORECASE)

target_mnu = None
for file_name in os.listdir(mnu_dir):
    if file_pattern.match(file_name):
        target_mnu = os.path.join(mnu_dir, file_name)
        break

if not target_mnu:
    raise FileNotFoundError("指定目录下未找到匹配的.mnu文件")

# 读取.mnu文件内容
with open(target_mnu, 'r', encoding='utf-8') as f:
    mnu_content = f.read()

# 将内容写入目标.fld文件,替换为你实际需要的.fld文件路径
with open("output.fld", 'w', encoding='utf-8') as f:
    f.write(mnu_content)

精准匹配命名规则的实现

如果你的.mnu文件有固定命名规则(比如示例中的MS+6位数字格式),可以修改正则规则实现精准匹配,避免匹配到无关的.mnu文件:
将上述代码中的正则规则替换为:

file_pattern = re.compile(r"^MS\d{6}\.mnu$")

多文件场景取最新文件

如果目录下存在多个历史.mnu文件,你可以通过文件修改时间筛选出最新的文件,适配每月生成新文件的场景:

import os
import re

mnu_dir = "./"
file_pattern = re.compile(r"^MS\d{6}\.mnu$")
matched_files = []

for file_name in os.listdir(mnu_dir):
    if file_pattern.match(file_name):
        file_path = os.path.join(mnu_dir, file_name)
        # 获取文件最后修改时间戳
        modify_time = os.path.getmtime(file_path)
        matched_files.append((modify_time, file_path))

if not matched_files:
    raise FileNotFoundError("指定目录下未找到匹配的.mnu文件")

# 按修改时间倒序排列,取最新的第一个文件
matched_files.sort(reverse=True)
latest_mnu = matched_files[0][1]

# 后续读写逻辑和基础实现一致

注意:你原示例代码中open(MS577007.mnu')存在语法错误,缺少文件名开头的单引号,实际使用时需要修正为open('MS577007.mnu')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:12:00