python3遍历目录的三种方法浅谈

日期:2023年2月22日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006
如果您想了解更多有关Python的知识,那么请点《我的Python浅谈系列目录》


文章目录

  • 一、目录、文件夹、文件以及路径的概念
  • 二、三种遍历目录的方法


python3遍历目录的三种方法浅谈_第1张图片


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

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

中文名 英文名 说明
目录 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

我的微信公众号【会飞的小猴子】,等你来关注哦 ^ - ^


1、《What is the difference between a directory and a folder?》
2、《极客教程-Python os.scandir()方法》


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/129107431

你可能感兴趣的:(Python3,python,遍历目录,文件夹,文件,cmd)