首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python中的regex找到文件所需的模式?

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

Stack Overflow用户
提问于 2021-11-10 09:45:07
回答 1查看 136关注 0票数 1

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

我有许多pdf文件,有相同的模式,但与不同的名称在末尾。

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

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

示例:

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

代码:

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 10:24:00

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

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

下面是一个固定的片段:

代码语言:javascript
复制
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行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69910982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档