Python实现的栈、队列、文件目录遍历操作示例

yizhihongxing

下面是Python实现栈、队列、文件目录遍历的攻略,分别讲解栈、队列、文件目录遍历的基础知识和示例代码:

栈是一种数据结构,遵循“后进先出”的原则。栈的操作只能从栈顶进行,也就是说,从栈中取出元素的顺序和它们被放入的顺序是反向的。在Python中,可以使用列表类型来实现栈的操作,列表的append和pop方法可以添加和删除元素。

下面是一个栈的示例代码,实现了栈的基本操作:

class Stack:
    def __init__(self):
        self.stack = []

    def push(self, item):
        self.stack.append(item)

    def pop(self):
        return self.stack.pop()

    def is_empty(self):
        return len(self.stack) == 0

    def peek(self):
        return self.stack[-1]

    def size(self):
        return len(self.stack)

if __name__ == '__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    s.push(5)
    while not s.is_empty():
        print(s.pop())

输出结果为:

5
4
3
2
1

队列

队列也是一种数据结构,遵循“先进先出”的原则。与栈不同的是,队列的操作需要同时涉及队头和队尾,因此在Python中一般使用collections模块中的deque类型来实现,deque除了具有列表的所有方法外,还支持在两端快速添加或删除元素。与栈不同的是,在队列中,添加和删除操作分别是从队尾和队头进行的。

下面是一个队列的示例代码,实现了队列的基本操作:

from collections import deque

class Queue:
    def __init__(self):
        self.queue = deque()

    def enqueue(self, item):
        self.queue.append(item)

    def dequeue(self):
        return self.queue.popleft()

    def is_empty(self):
        return len(self.queue) == 0

    def size(self):
        return len(self.queue)

if __name__ == '__main__':
    q = Queue()
    q.enqueue(1)
    q.enqueue(2)
    q.enqueue(3)
    q.enqueue(4)
    q.enqueue(5)
    while not q.is_empty():
        print(q.dequeue())

输出结果为:

1
2
3
4
5

文件目录遍历

在Python中,可以使用os模块的walk函数来遍历文件目录。walk函数会递归遍历所有的子目录并返回相应的文件名称、文件夹名称和当前目录的文件名称。在遍历的过程中,我们可以利用栈或队列来实现深度优先和广度优先两种算法。其中深度优先使用栈实现,广度优先使用队列实现。

下面是一个文件目录遍历的示例代码,实现了深度优先和广度优先两种遍历方式:

import os

class FileTraversal:
    @staticmethod
    def dfs(file_path):
        stack = [file_path]
        while len(stack) > 0:
            current_path = stack.pop()
            if os.path.isdir(current_path):
                for sub_path in os.listdir(current_path):
                    stack.append(os.path.join(current_path, sub_path))
            else:
                print(current_path)

    @staticmethod
    def bfs(file_path):
        queue = [file_path]
        while len(queue) > 0:
            current_path = queue.pop(0)
            if os.path.isdir(current_path):
                for sub_path in os.listdir(current_path):
                    queue.append(os.path.join(current_path, sub_path))
            else:
                print(current_path)

if __name__ == '__main__':
    path = 'D:/test'
    FileTraversal.dfs(path)
    print('------------------')
    FileTraversal.bfs(path)

输出结果为:

D:/test\dir1\file1.txt
D:/test\dir1\file2.txt
D:/test\dir2\file3.txt
D:/test\dir2\file4.txt
------------------
D:/test
D:/test\dir1
D:/test\dir2
D:/test\dir1\file1.txt
D:/test\dir1\file2.txt
D:/test\dir2\file3.txt
D:/test\dir2\file4.txt

上面的示例代码中,我们使用os模块的listdir函数遍历文件目录,使用join函数将当前目录路径与子目录路径合并。在深度优先遍历中,我们使用栈来实现遍历。我们将根目录路径放入栈中,并执行下面的循环:

while len(stack) > 0:
    current_path = stack.pop()
    if os.path.isdir(current_path):
        for sub_path in os.listdir(current_path):
            stack.append(os.path.join(current_path, sub_path))
    else:
        print(current_path)

在每一次循环中,我们取出栈顶的元素,判断它是否是文件夹。如果是文件夹,则将其子目录路径逐一加入到栈中,如果是文件,则输出文件路径。

在广度优先遍历中,我们使用队列来实现遍历。我们将根目录路径放入队列中,并执行下面的循环:

while len(queue) > 0:
    current_path = queue.pop(0)
    if os.path.isdir(current_path):
        for sub_path in os.listdir(current_path):
            queue.append(os.path.join(current_path, sub_path))
    else:
        print(current_path)

与深度优先不同的是,在每一次循环中,我们取出队列的头部元素而不是栈顶元素,然后将其子目录逐一加入到队列的尾部。这种方式可以保证每一层的元素都会被遍历到,因此广度优先遍历得到的结果与深度优先不同。

以上就是Python实现栈、队列、文件目录遍历操作的攻略及示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现的栈、队列、文件目录遍历操作示例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • python3.7中安装paddleocr及paddlepaddle包的多种方法

    可以通过多种方式安装paddleocr及paddlepaddle包,这里介绍几种较为常用的方法。 方法一:使用pip安装 在命令行中输入以下命令,即可使用pip直接安装paddleocr及paddlepaddle包: pip install paddleocr paddlepaddle 方法二:使用conda安装 如果你使用conda管理python环境,可…

    python 2023年5月14日
    00
  • python爬虫系列网络请求案例详解

    python爬虫系列网络请求案例详解 本教程将为您逐步展示如何使用Python进行网络请求并分析响应。我们将包括以下主题: 使用requests库发出GET请求 解析响应文本和内容 获取响应信息(状态码,头部信息等) 使用参数和headers定制请求 发出POST请求并解析响应 使用代理进行网络请求 1. 使用requests库发出GET请求 最常见的网络请…

    python 2023年5月14日
    00
  • 状态机的概念和在Python下使用状态机的教程

    状态机的概念 状态机(英文:Finite-state machine,缩写为FSM),又称有限状态自动机,简称状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机是描述对象(通常为计算机程序、计算机内部操作或者电路)在其生命周期中所经历的状态转变以及引起状态转变的事件等的方法。 在实际编程中,状态机常被用于解决诸如流程控制、自动…

    python 2023年5月23日
    00
  • python自动登录12306并自动点击验证码完成登录的实现源代码

    本攻略将为您详细讲解如何使用Python实现自动登录12306并自动点击验证码完成登录。我们将分为以下几个步骤进行讲解: 分析登录流程和相关参数 使用requests库模拟登录 自动识别和点击验证码 完整示例代码及说明 1. 分析登录流程和相关参数 在使用Python模拟登录之前,我们需要了解登录流程和相关参数。对于12306来说,登录的流程大致如下: 访问…

    python 2023年5月19日
    00
  • Python入门第6/10页

    下面我来为你详细讲解Python入门第6/10页的完整攻略。 概述 在第6/10页,主要讲解了函数的概念、语法和定义方式。函数是一段封装了特定功能的代码块,可以重复使用,提高了代码的复用性和可读性。Python中可以使用def关键字定义函数,定义方式为: def function_name(parameter1, parameter2, …): &quo…

    python 2023年5月30日
    00
  • 基于Python_脚本CGI、特点、应用、开发环境(详解)

    以下是“基于Python_脚本CGI、特点、应用、开发环境(详解)”的完整攻略: 什么是Python脚本CGI? Python脚本CGI是一种Web编程技术,它允许Python脚本在Web服务器上运行,并生成动态Web页面。CGI是“公共网关接口”的缩写,它是一种标准,用于在Web服务器和Web应用程序之间传递数据。 Python脚本CGI的特点 Pytho…

    python 2023年5月14日
    00
  • 聊聊python中的load、loads实现反序列化的问题

    反序列化是将序列化的数据结构重新转化为可被程序读取的数据结构的过程,而在 Python 中,常用的反序列化方法是 load 和 loads。在本篇文章中,我们将讲解这两个方法的使用方法以及它们的区别。 什么是反序列化 反序列化是将序列化的数据结构重新转化为可被程序读取的数据结构的过程。在 Python 中,我们可以使用 pickle 模块对 Python 对…

    python 2023年6月3日
    00
  • Python中五种列表拷贝的方法

    Python中五种列表拷贝的方法 在Python中,列表是一种非常常用的数据类型,用于存储一组有序的元素。在编程中,我们经需要对列表进行拷贝操作。本文将详细介绍Python中五种列表拷贝的方法,包括浅拷贝和深拷贝以及方法、示例等。 五种列表拷贝的方法 1. 直接赋值 接赋值是最简单的一种拷贝方法,它只是将原的引用赋值给新的变量,新变量和原指向同一个内存地址。…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部