Discuss / Python / 第二题

第二题

Topic source

极大似然

#1 Created at ... [Delete] [Delete and Lock User]

思路:首先定义一个函数,能把指定目录下的所有子文件夹找出来,做成一个文件夹列表。然后在列表中每个文件夹里去找包含指定字符串的文件。

代码如下:

import os

#获取指定目录下的全部目录
def get_all_dir(path='.'):
    #首先把传入的目录放进去
    All_dir = [os.path.abspath(path)]
    a,b = 0,len(All_dir)
    while True:
        #对每个新加入列表的文件夹,都去看一下有没有下级文件夹
        for sub_d in All_dir[a:b]:  #这个切片保证不会重复查看某个文件夹
            All_dir += [os.path.join(sub_d,x) for x in os.listdir(sub_d) if os.path.isdir(os.path.join(sub_d,x))]
            
        a,b = b,len(All_dir) #上一轮查看到了第b个,本轮从第b+1开始看到最后一个文件夹
        if a == b:  #如果某一轮查看下来,没有发现新的子文件夹,说明所有文件夹都取到了,此时跳出循环
            break
    return All_dir

#获取了所有目录后,依次在每个目录下查找包含指定字段的文件
def find_the_one(the_one,path="."):
    if not os.path.isdir(path):
        raise ValueError('invalid path')
    Q = {}
    for sub_path in get_all_dir(path):
        t = [x for x in os.listdir(sub_path) if os.path.isfile(os.path.join(sub_path,x)) and the_one in os.path.splitext(x)[0]] #and the_one in os.path.splitext(x)[0]
        if t != []:
            Q[sub_path] = t
    return Q

  • 1

Reply