在第一个匹配项时停止搜索,在包含 +900 个文件夹 PYTHON 的文件夹中



我有一个文件夹(C: \ Users \ jrange14 \ Desktop \ Jobs(,里面有 900 多个文件夹,格式如下:

"三个数字"+">

_"+"作业名称">

示例:888_jtjdt

我想进行搜索,用户只需要请求一个名为 JOB 的三位数输入,程序将搜索整个文件夹并找到所需的文件夹,只有文件夹的前 3 个字符。

这是获取该文件夹路径的 Python 代码:

import os
import fnmatch
#Job to find
job = "888"
#This is the folder where all the "jobs" are
eng_path=r"C:Usersjrange14DesktopJobs"
#Define the path in which we will work
os.chdir(eng_path)
path = os.getcwd()
print(path)
#Look in the directory
for dirs in os.listdir():
if fnmatch.fnmatch(dirs, job+"*"):
#print(dirs)
job_name = dirs
job_path=eng_path+'\'+job_name
print(job_path)

有了这个代码,我可以得到 3 件事, 工作目录:

C:Usersjrange14DesktopJobs

所需文件夹的全名:

888_jtjdt

以及前两个的总和,以获取该文件夹的完整路径:

C:Usersjrange14DesktopJobs888_jtjdt

问题是这段代码需要很长时间才能获得这个答案,因为文件夹内有许多文件夹(超过 900 个(,并将每个文件夹与输入匹配。

从我所看到的,我的问题在这里:

#Look in the directory
for dirs in os.listdir():
if fnmatch.fnmatch(dirs, job+"*"):
#print(dirs)
job_name = dirs

有了这个for我看到它遍历了整个目录,寻找我们输入的匹配项。 即使程序找到所需的文件夹,它也会继续在整个目录中寻找另一个文件夹

由于每个作业的前三个数字彼此不同,因此无需继续寻找其他可能的匹配项。

我该怎么做才能在第一场比赛中停止程序?

使程序更快的解决方案是使用生成器。无论何时找到实际文件,使用os.listdir()都将花费几乎相同的时间,因为它不是生成器,它不会在每次迭代期间生成每个结果,它会首先将所有文件列出到内存中然后循环访问它们。

使用path.py

from path import Path
eng_path = r"C:Usersjrange14DesktopJobs"
d = Path(eng_path)
job = "888"
for dirs in d.dirs(f'{job}_*'):
print(dirs)
break

你能试一试吗?

import os
#Job to find
job_number = "888_"
#This is the folder where all the "jobs" are
eng_path=r"C:Usersjrange14DesktopJobs"
#Look in the directory
job_name = None
for entry in os.listdir(eng_path):
if entry.startswith(job_number):
job_name = entry
break
if job_name is None:
print("Job number not found")
else:
job_path=eng_path+'\'+job_name
print(job_path)

相关内容

  • 没有找到相关文章

最新更新