如何使用正则匹配打开文件名每月变动的.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
相关产品推荐
相关产品推荐

