美文网首页
Python 扫描并文件夹并读取文件

Python 扫描并文件夹并读取文件

作者: 骄傲牛 | 来源:发表于2016-03-02 10:03 被阅读0次

    最近发现一个问题,从项目开始到现在,url 的路径要爆炸了,因此要看一下项目里所有 spring controller 的路径配置。正好前一段时间学了一点 python,就尝试使用 python 写个小程序扫描一下。

    需要用到的python函数

    • 读取文件夹
    • 打开文件
    • 读取文件内容
    • 简单字符串处理

    分析文件内容

    读取文件使用 open函数,第一个参数为文件全路径,第二个参数为读写标识,'r'表示只读

    file.readlines()函数直接把每一行读取出来,返回一个数组

    遍历数据时使用了 enumerate 函数,这样可以同时得到行号

    tuple是个好东西,简单的数据结构直接用 tuple 来实现,不需要新建一个数据结构或者对象了,函数返回一个 tuple 也可以让返回值变得更加丰富

    def parse_springmvcfile(filepath, filename):
        request_mapping = []
        file = open(filepath + "/" + filename, "r")
        is_spring_file = False
        root_path = None
        # 一行一行的读取文件
        for linenum, line in enumerate(file.readlines()):
            if is_spring_file:  # 已经找到配置行说明该文件是 spring controller 文件
                if "@RequestMapping" in line:  # 找到 springmvc 路径配置行
                    if root_path is None:
                        root_path = get_cotroller_path(line)  # 根路径
                    else:
                        request_mapping.append((linenum+1,root_path + get_cotroller_path(line)))  # 解析路径字段
            else:  # 还没找到配置行说明该文件是 spring controller 文件,别干其它的,继续找
                if "@Controller" in line:
                    is_spring_file = True
        return is_spring_file, request_mapping
    

    扫描文件夹

    递归扫描文件夹,并将指定后缀的文件全路径放到数组中返回

    数组的并接使用 extend 函数,使用 append 函数向数组中添加元素

    def scanpath(filepath, suffix):
        filelist = []
        print("开始扫描【{0}】".format(filepath))
        if not os.path.isdir(filepath):
            print("【{0}】不是目录".format(filepath))
            exit(-1)
        for filename in os.listdir(filepath):
            if os.path.isdir(filepath + "/" + filename):
                filelist.extend(scanpath(filepath + "/" + filename, suffix))
            else:
                if filename.endswith(suffix):
                    filelist.append((filepath, filename))
        return filelist
    

    截取路径配置

    controller 里的路径是配置成@RequestMapping("/路径"),要把里面的路径取出来,需要对字符串进行处理。我对正则不熟,只好用比较土的方法

    def get_cotroller_path(request_mapping):
        group = request_mapping.split("\"")
        path = group[1]
        if path.endswith("/"):
            path = path[:-1]
        if not path.startswith("/"):
            path = "/" + path
        return path
    

    现在调用scanpath后使用parse_springmvcfile,就可以把所有controller 文件找到并显示里面所有的路径配置。

    开会了开会了,有些路径要调整一下

    :)

    相关文章

      网友评论

          本文标题:Python 扫描并文件夹并读取文件

          本文链接:https://www.haomeiwen.com/subject/azrnkttx.html