【发布时间】:2021-11-10 09:45:07
【问题描述】:
我试图匹配我文件夹中文件的模式,文件扩展名为 pdf。
我有许多 pdf 文件,它们具有相同的模式但最后名称不同。
模式包括日期 + 文件名。
问题在于,当我运行脚本时,系统将两个文件名都视为第一个模式 (python_pt),而不是使用 elif 语句。
例子:
10-11-2021 python.pdf22-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))
【问题讨论】:
-
我没有检查正则表达式的有效性,但是你使用的变量 python_pt、java_pt1 和 java_pt2 是有缺陷的。它们是字符串。因此,例如,if python_pt 将始终返回 True
-
什么是
src?另外,您在滥用锚点,这些模式都没有真正起作用,因为$标记了字符串的结尾,之后您需要更多的字符。而且你从不使用模式,因为要运行正则表达式检查,你需要使用re.match/re.search/re.fullmatch。请确保您使用更新的模式尝试这些(不随机使用锚点),如果仍然失败,请编辑问题。 -
@WiktorStribiżew src = 驱动器 C 的路径:
-
@BrutusForcus 我不明白你的评论这不是我们创建模式的方式??
-
@khaledM_dev 您的代码中没有任何内容尝试使用 RE 模式来匹配从 os.walk() 返回的文件名。我建议使用 glob 来获取所有以 '.pdf' 结尾的文件的简化列表,然后使用 re 模块查看哪些是相关的(如果有的话)。
标签: python regex if-statement path