Python 学习之目录递归

阅读文本大概需要 6 分钟

写在前面

这两天咨询了下各位读者的意见,建议是在每一次分享时可以分享一些对应的练习题,之前也这样做过,慢慢地就消失了。所以之后会尽量给大家找一些对应的练习题,如果大家有好的练习题也可以告诉我一下。

今天要学习的内容是关于栈和队列的简单介绍,之后分别用递归函数、栈、队列对自己的目录文件进行深度遍历与广度遍历。

栈的介绍1

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行,如同封底的容器一般,特点是先进后出。

# 模拟栈结构,先进后出

stack = []

print(stack)  # []

# 压栈

stack.append("A")

stack.append("B")

stack.append("C")

# 出栈

p = stack.pop()

print(p)  # C

print(stack)  # ['A', 'B']

队列的介绍2

队列也是一种特殊的线性表。其特殊性在于限定一端插入而另一端删除数据元素(队尾进队头出),如同排队买票一般,特点是先进先出。

# 模拟队列,先进先出

import collections

# 创建队列

q = collections.deque()

print(q)  # deque([])

# 进队

q.append("A")

q.append("B")

q.append("C")  # deque(['A', 'B', 'C'])

print(q)

# 出队

p = q.popleft()

print(p)  # A

print(q)  # deque(['B', 'C'])

函数递归目录3

import os

p = r"C:\Users\Mark\PycharmProjects\Python"

def getAllDir(path, sp):

    # 得到当前目录下所有的文件

    fileList = os.listdir(path)

    sp += "   "

    # 处理每一个文件

    for fileName in fileList:

        fileAbsPath = os.path.join(p, fileName)

        # 判断是否是目录(用绝对路径)

        if os.path.isdir(fileAbsPath):

            print(sp + "目录", fileName)

            # 递归调用

            getAllDir(fileAbsPath, sp)

        else:

            print(sp + "普通文件:", fileName)

getAllDir(p, sp="")

队列之广度遍历4

广度遍历:1 是根目录 ,1 进栈处理之后,2 5 进栈,将 2 和 5 处理之后,依次处理 3 4 6 7,按照层级处理

# 广度遍历

import os

import collections

p = r"C:\Users\Mark\PycharmProjects\Python"

def getAllDirBe(p):

    q = collections.deque()

    q.append(p)

    # 处理栈,当队列为空的时候结束循环

    while len(q) != 0:

        # 从队列里取出数据

        dirPath = q.popleft()

        # 目录下的所有文件

        fileList = os.listdir(dirPath)

        # 处理每一个文件,如果是文件打印,目录地址进队

        for fileName in fileList:

            fileAbsPath = os.path.join(dirPath, fileName)

            # 判断是否是目录(用绝对路径)

            if os.path.isdir(fileAbsPath):

                print("目录:"+fileName)

                q.append(fileAbsPath)

            else:

                print("普通文件:"+fileName)

getAllDirBe(p)

栈之深度遍历5

深度遍历:1 是根目录 ,1 进栈处理之后,2 5 进栈,将 2 目录下的全部处理完之后,开始处理 5 下面的

# 深度遍历

import os

p = r"D:\BaiduNetdiskDownload\Java\第1阶段\day01"

def getAllDirDe(p):

    stack = []

    stack.append(p)

    # 处理栈,当栈为空的时候结束循环

    while len(stack) != 0:

        # 从栈里取出数据

        dirPath = stack.pop()

        # 目录下的所有文件

        fileList = os.listdir(dirPath)

        # 处理每一个文件,如果是文件打印,目录地址压栈

        for fileName in fileList:

            fileAbsPath = os.path.join(dirPath, fileName)

            # 判断是否是目录(用绝对路径)

            if os.path.isdir(fileAbsPath):

                print("目录:"+fileName)

                stack.append(fileAbsPath)

            else:

                print("普通文件:"+fileName)

getAllDirDe(p)

写在最后

最后给大家送波福利!如果你打算入手或着正在学习Python,欢迎加入我们一起学习。后台回复「Python」,获取到你想要的资源。同时我们组建了一个Python技术学习群,里面大佬与小白都有,有良好的学习氛围。想要进群学习的,加 Mark 微信「IMark950831」,备注「加群」,期待你的到来!

好了,今天的分享就到这了,觉得写得不错的,点赞转发支持下。

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专注研发

【2018】笔试题笔记

3.对关键字{10,20,8,25,35,6,18,30,5,15,28}序列进行希尔排序,取增量d =5时,排序结果为( {6,18,8,5,15,10,...

1474
来自专栏Golang语言社区

利用Go语言实现简单Ping过程的方法

、准备工作 安装最新的Go 1、由于Google被墙的原因,如果没有VPN的话,就到这里下载:http://www.golangtc.com/download ...

4225
来自专栏Python绿色通道

Python爬虫:把爬取到的数据插入到execl中

前面我们把大量数据已经爬取到了本地,但这些数据如果不存储起来,那么就会变得无效.开始本文之前,请确保已经阅读。

1503
来自专栏用户2442861的专栏

Java Web 中使用ffmpeg实现视频转码、视频截图,javaffmpeg

http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html#!comments

3091
来自专栏北京马哥教育

练了一年再来总结的 Vim 使用技巧

1413
来自专栏liuchengxu

Spark GraphX 对图进行可视化

Spark 和 GraphX 对并不提供对数据可视化的支持, 它们所关注的是数据处理. 但是, 一图胜千言, 尤其是在数据分析时. 接下来, 我们构建一个可视化...

1721
来自专栏JackieZheng

AngularJS入门心得3——HTML的左右手指令

  在《AngularJS入门心得1——directive和controller如何通信》我们提到“AngularJS是为了克服HTML在构建应用上的不足而设计...

2015
来自专栏漫漫前端路

关于一些Vue的文章。(7)

首先安利一波福利,有没有用vscode的小伙伴?推荐一个神奇的字体,自从用了这个字体,敲代码效率简直上天了。先上图看看效果:

1165
来自专栏苦逼的码农

回车与换行的故事

以前在学汇编的时候,一直不知道老师在换行时,总会打一个换行符和回车符,原来他们还有这么一个故事….

1313
来自专栏java一日一条

Web前端面试题目及答案汇总

以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢...

5042

扫码关注云+社区