如何在python中使用regex找到文件所需的模式



我试图匹配文件夹中文件的模式,文件扩展名为pdf

我有很多pdf文件,它们有相同的模式,但最后有不同的名称。

模式包括文件的日期+名称

问题是,当我运行脚本时,系统会将两个文件名都视为第一种模式(python_pt(,而不使用elif语句。

示例:

  • 10-11-2021 python.pdf
  • 22-09-2021 java.pdf

代码:

import re 
import  os 
from os import path 
from tqdm import tqdm
from time import sleep 
python_pt= "^[0-3]?[0-9]-[0-3]?[0-9]-(?:[0-9]{2})?[0-9]{2}$ python.pdf"
java_pt1= "^[0-3]?[0-9]-[0-3]?[0-9]-(?:[0-9]{2})?[0-9]{2}$ java.pdf"
java_pt2= "^ java [0-3]?[0-9]-[0-3]?[0-9]-(?:[0-9]{2})?[0-9]{2}$.pdf"
str = 'c:'
a = 0
i = 0
for dirpath, dirnames, files in os.walk(src, topdown=True):         
print(f'nFound directory: {dirpath}n')

for  file in tqdm(files):
sleep(.1)
full_file_name = os.path.join(dirpath, file)
if os.path.join(dirpath) == src:
if file.endswith("pdf"):
if python_pt:
i+=1
elif java_pt1 or java_pt2:
a+=1
print("{} file 1 n".format(i))
print("{} file 2 n".format(a))

问题出在正则表达式和执行正则表达式检查的方式上:

  • 锚不得在图案内随意使用;一旦您在中间使用$,它就会使模式无效(字符串结束后不能有字符(。由于您需要检查文件名是否以您的模式结尾,请仅在末尾添加$,并且不要忘记转义文本.
  • 要检查是否匹配,您需要使用re.search/re.match/re.fullmatch方法之一

这里有一个固定的片段:

import re, os
from os import path 
from tqdm import tqdm
from time import sleep 
python_pt= r"[0-3]?[0-9]-[0-3]?[0-9]-(?:[0-9]{2})?[0-9]{2} python.pdf$" # FIXED
java_pt1= r"[0-3]?[0-9]-[0-3]?[0-9]-(?:[0-9]{2})?[0-9]{2} java.pdf$"    # FIXED
java_pt2= r"java [0-3]?[0-9]-[0-3]?[0-9]-(?:[0-9]{2})?[0-9]{2}.pdf$"    # FIXED
src = "C:"
i=0
a=0
for dirpath, dirnames, files in os.walk(src, topdown=True):         
print(f'nFound directory: {dirpath}n')

for  file in tqdm(files):
sleep(.1)
full_file_name = os.path.join(dirpath, file)
if os.path.join(dirpath) == src:
if file.endswith("pdf"):
if re.search(python_pt, file):                               # FIXED
i+=1
elif re.search(java_pt1, file) or re.search(java_pt2, file): # FIXED
a+=1
print("{} file 1 n".format(i))
print("{} file 2 n".format(a))

参见# FIXED行。

相关内容

  • 没有找到相关文章

最新更新