在+900个文件夹中的第一个匹配处停止搜索

2024-09-30 06:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

“三个数字”+“”+“作业名称”

示例:888_jtjdt

我想做一个搜索,其中用户只需要要求一个三位数的输入称为作业,程序将搜索整个文件夹,并找到所需的文件夹,只有文件夹的前3个字符

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

import os
import fnmatch

#Job to find
job = "888"

#This is the folder where all the "jobs" are
eng_path=r"C:\Users\jrange14\Desktop\Jobs"

#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:\Users\jrange14\Desktop\Jobs

所需文件夹的全名:

888_jtjdt

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

C:\Users\jrange14\Desktop\Jobs\888_jtjdt

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

从我看来,我的问题在于:

#Look in the directory
for dirs in os.listdir():

    if fnmatch.fnmatch(dirs, job+"*"):
        #print(dirs)
        job_name = dirs

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

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

在第一场比赛中我能做些什么来停止节目


Tags: thepathin文件夹os作业jobsjob
2条回答

你能试一试吗

import os

#Job to find
job_number = "888_"

#This is the folder where all the "jobs" are
eng_path=r"C:\Users\jrange14\Desktop\Jobs"

#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)

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

使用^{}

from path import Path

eng_path = r"C:\Users\jrange14\Desktop\Jobs"
d = Path(eng_path)
job = "888"

for dirs in d.dirs(f'{job}_*'):
    print(dirs)
    break

相关问题 更多 >

    热门问题