Python笔试题(在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出路径)详解

    前言:

这道题想必大家在面试或者练习时都遇到过,是一道经典的Python笔试题,主要考察的是对python标准库的基本使用。

过程用到的os的基本模块

os.listdir(path): 列举目录下的所有文件(包含目录),返回一个列表
os.path.join(path1,path2): 将路径进行组合
os.path.isfile(path): 判断是否为文件 

解题思路

这道题的解题思路同样十分的简单,无非就是经典的三步走。
数据输入: 这里面则是获取当前目录以及子目录下的所有文件或目录的名字
数据处理:判断名字是否为文件,再判断名称是否包含指定的字符串
数据输出:确定了包含指定字符串的文件,然后输出其相对/绝对路径

具体实现

先实现第一步,获取当前目录以及子目录下的所有文件或目录的名字。
这一步很简单,通过简单的递归就能实现。具体代码如下:

import os
path = r"C:\Users\use\Desktop\2019-12-31"
Aggregate_list = []
def search_file(path):
    for file in os.listdir(path):
        this_path = os.path.join(path, file)
        if os.path.isfile(this_path):
            Aggregate_list.append(this_path)
        else:
            Aggregate_list.append(this_path)
            search_file(this_path) 
    return Aggregate_list
    
print(search_file(path))

接着其实我们就是实现第二步,判断名字是否为文件(其实已经实现过了),判断名称是否包含指定的字符串,这一步同样很简单。只需要简单的加个判断,再返回包含的字符串,所以我们的参数又多了一个。具体代码如下:

find_str = "screen_str"
Aggregate_list = []
def search_file(path, find_str):
    for file in os.listdir(path):
        this_path = os.path.join(path, file)
        if os.path.isfile(this_path):
            if find_str in this_path:
                Aggregate_list.append(this_path)
        else:
            search_file(this_path, find_str)
    return Aggregate_list

print(search_file(path, find_str))

只是这样实现,我们觉得还差点什么。我们期望有一个函数,我们传进去一个参数,返回一个路径集合。我们简单优化一下:

def get_file_path_list(path, find_str):
    def search_file(path, find_str):
        for file in os.listdir(path):
            this_path = os.path.join(path, file)
            if os.path.isfile(this_path):
                if find_str in this_path:
                    Aggregate_list.append(this_path)
            else:
                search_file(this_path, find_str)
    Aggregate_list = []
    assert os.path.isdir(path), f"{ path} is not a dir"
    search_file(path, find_str)
    return Aggregate_list
    原文作者:达达爱吃肉
    原文地址: https://blog.csdn.net/weixin_44706915/article/details/103770461
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞