我有一个文件夹(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
,我看到它遍历了整个目录,寻找我们输入的匹配项。即使程序找到了所需的文件夹,它也会继续在整个目录中查找另一个文件夹
由于每个作业的前三个编号彼此不同,因此无需继续寻找其他可能的匹配项
在第一场比赛中我能做些什么来停止节目
你能试一试吗
使程序更快的解决方案是使用generator。无论何时找到实际文件,使用
os.listdir()
都将花费几乎相同的时间,因为它不是生成器,它不会在每次迭代期间生成每个查找,它首先将所有文件列出到内存中,然后对它们进行迭代使用^{} :
相关问题 更多 >
编程相关推荐