如何在日志文件中用正则提取仅带后缀的CSV文件名,排除完整路径
正则提取CSV文件名解决方案
原有代码问题分析
- 搭配
re.S参数后,正则中的.可以匹配换行符,非贪婪匹配.*?没有明确的终止边界,导致匹配溢出到后续行 - 没有过滤路径前缀,也没有严格限定
.csv扩展名规则 - 未正确匹配日志行末尾的句号作为匹配终止标识
修复方案
方案1:正则一步提取(推荐)
直接通过正则捕获纯文件名,无需额外处理:
for result in re.findall(r'Importing file .*/([^/]+\.csv)\.', fp.read()): print(result)
正则规则说明:
.*/:匹配文件路径中最后一个斜杠及之前的所有路径内容([^/]+\.csv):捕获组,匹配所有不包含斜杠的字符+.csv后缀,也就是纯CSV文件名\.:匹配日志行中CSV文件名末尾的句号,作为匹配终止边界,避免溢出
注:如果需要兼容Windows反斜杠路径,可以将正则调整为
r'Importing file .*[\\/]([^\\/]+\.csv)\.'
方案2:先提取全路径再解析(兼容性更强)
如果路径格式不固定,可以先提取完整路径,再用系统自带的路径工具解析文件名:
import os import re for full_path in re.findall(r'Importing file (.*?\.csv)\.', fp.read()): csv_filename = os.path.basename(full_path) print(csv_filename)
内容的提问来源于stack exchange,提问作者rashxxx
相关产品推荐
相关产品推荐

