根据匹配的模式从整个文件列表中选择一个文件

时间:2018-10-11 23:42:40

标签: python regex python-3.x

如果模式匹配,我试图从整个文件列表中选择一个文件名。文件每15天不断变化,仅文件的特定部分匹配。 文件名通常为ABCD.NAD.RPT8.2018.10.12.TXTNAD之前和RPT8RPT9更改之后的部分。

模式为NAD.RPT8NAD.RPT9

我尝试过:

from os import walk
from os.path import splitext
import re
dolv_files = os.listdir(r'C:\DOLV')

for file_name in dolv_files:
  fname1=file_name.rsplit('.',4)[0]
   pattern = re.compile(r'NAD.RPT*')
   matches = [x for x in fname1 if pattern.match(x)]
   print(matches)
   first_fname=os.listdir(r'C:\DOLV')[0]
   print(first_fname)

它没有给我任何结果。它需要使用NAD.RPT8NAD.RPT9

提取第一个文件

任何建议如何使其正常工作。

关于, 仁。

2 个答案:

答案 0 :(得分:0)

re.match方法仅从字符串的开头开始匹配。要匹配字符串中的任何位置,应改用re.search。另外,似乎您正在使用全局模式而不是正则表达式模式。在正则表达式模式中,*意味着要匹配0个或多个前面的字符,因此RPT*实际上匹配RPRPTRPTT,{{1 }}等,并且RPTTT匹配除换行符以外的任何字符,而不仅仅是点。但更重要的是,您的.变量是一个字符串,因此如果您使用fname1遍历fname1,则x就是x的每个字符。您应该直接与fname1匹配。但是,实际上,您实际上只是与固定字符串fname1匹配,因此不需要正则表达式,而只需使用NAD.RPT运算符即可:

in

答案 1 :(得分:0)

使用dim(gtools::permutations(10, 10))

pathlib