python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python3遍历目录

浅析Python3中遍历目录的三种方法

作者:Commas.KM

在学习中,工作中,我们经常会说遍历一下当前目录咯,那么Python3中遍历目录的方法具体都有哪些呢并且如何操作呢,下面小编就来和大家简单聊聊吧

一、目录、文件夹、文件以及路径的概念

在学习中,工作中,我们经常会说遍历一下当前目录咯。但是一旦被问到这个目录到底是什么的时候,明明我们感觉自己知道是什么,却又说不清楚到底是什么。没关系,接下来我们来了解下,下次就可以说清楚啦……

中文名英文名说明
目录directory一系列文件和文件夹的集合
文件夹folder用来存放文件和文件夹的容器
文件file用来存储信息的单个数据单元(文本、图像、声音等等)
路径path用于定位文件的路径

从上表可以看出,目录和文件夹意思差不多……

实际上目录是DOS操作系统时期的称呼,而Windows操作系统时期的称呼为文件夹。

严格来说,目录不是文件夹,因为目录映射到存储介质上的物理位置,而文件夹不一定,例如桌面上的文件夹。

现在我们回过头来看“遍历一下当前目录”的含义,实际上就是遍历一系列的文件与文件夹。

这些文件与文件夹和当前路径有着千丝万缕的关系,因此我们会觉得当前目录的感觉又有点侧重于路径,不过它绝不是路径。

二、三种遍历目录的方法

代码返回说明
os.listdir(path)返回查询路径下的所有目录的列表,不包括子孙目录
os.walk(GenericPath)返回一个三元组的迭代器,其中元组(root,dirs,files)
os.scandir(GenericPath)返回以一个DirEntry(目录条目)对象的迭代器

先看看当前目录结构,这次就在命令行看吧。(想快速了解命令行如何使用,请看我CSDN中的另外一篇博客《Windows中的CMD不需要死记硬背》)

首先,我们得了解怎么用tree来查看当前目录树,执行tree /?

PS D:\Mine\PythonWork\k001_dir> tree /?
以图形显示驱动器或路径的文件夹结构。       
TREE [drive:][path] [/F] [/A]
   /F   显示每个文件夹中文件的名称。       
   /A   使用 ASCII 字符,而不使用扩展字符。

然后,我们使用tree /F查看当前目录树结构,如下所示

PS D:\Mine\PythonWork\k001_dir> tree /F
文件夹 PATH 列表    
卷序列号为 277B-1704
D:.
│  0.txt
│  main.py

└─父目录
    │  1.txt        
    │
    └─子目录        
        │  21.txt   
        │  22.txt   
        │  23.txt   
        │
        └─孙目录
                31.txt
                32.txt

话不多说,直接代码

# coding:utf-8
import os
def traversal_dirs(path):
    # 递归遍历目录 listdir
    for dir in os.listdir(path):
        dir = os.path.join(path, dir)
        print(dir)
        if os.path.isdir(dir):
            traversal_dirs(dir)
def untraversal_walk(path):
    # 无需递归遍历目录 walk
    for root, dirs, files in os.walk("."):
        # print("【root】:", root)
        # print("【文件夹】:", dirs)
        # print("【文件】:", files)
        # print("-"*20)
        for name in files:
            print(os.path.join(root, name))
        for name in dirs:
            print(os.path.join(root, name))
def traversal_scandirs(path):
    # 递归遍历目录 candirs
    for item in os.scandir(path):
        print(item.path)
        if item.is_dir():
            traversal_scandirs(item.path)
if __name__ == "__main__":
    # NO1:只可以遍历当前目录下的文件与文件夹
    print("="*20, "traversal_dirs,结果如下:")
    traversal_dirs(".")
    # NO2:遍历选择的目录下所有文件夹与文件
    print("="*20, "untraversal_walk,结果如下:")
    untraversal_walk(".")
    # NO3:只可以遍历当前目录下的文件与文件夹
    print("="*20, "traversal_scandirs,结果如下:")
    traversal_scandirs(".")

最后,执行python main.py,结果输出:

PS D:\Mine\PythonWork\k001_dir> python main.py
==================== traversal_dirs,结果如下:
.\0.txt
.\main.py
.\父目录
.\父目录\1.txt
.\父目录\子目录
.\父目录\子目录\21.txt
.\父目录\子目录\22.txt
.\父目录\子目录\23.txt
.\父目录\子目录\孙目录
.\父目录\子目录\孙目录\31.txt
.\父目录\子目录\孙目录\32.txt
==================== untraversal_walk,结果如下:
.\0.txt
.\main.py
.\父目录
.\父目录\1.txt
.\父目录\子目录
.\父目录\子目录\21.txt
.\父目录\子目录\22.txt
.\父目录\子目录\23.txt
.\父目录\子目录\孙目录
.\父目录\子目录\孙目录\31.txt
.\父目录\子目录\孙目录\32.txt
==================== traversal_scandirs,结果如下:
.\0.txt
.\main.py
.\父目录
.\父目录\1.txt
.\父目录\子目录
.\父目录\子目录\21.txt
.\父目录\子目录\22.txt
.\父目录\子目录\23.txt
.\父目录\子目录\孙目录
.\父目录\子目录\孙目录\31.txt
.\父目录\子目录\孙目录\32.txt

到此这篇关于浅析Python3中遍历目录的三种方法的文章就介绍到这了,更多相关Python3遍历目录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文