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

news2025/7/10 13:22:52

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


文章目录

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


在这里插入图片描述


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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript中怎么实现链表?

JavaScript中怎么实现链表? 学习数据结构的的链表和树时,会遇到节点(node)这个词,节点是处理数据结构的链表和树的基础。节点是一种数据元素,包括两个部分:一个是实际需要用到的数据&#xff1b…

MATLAB | 如何用MATLAB绘制这样有气泡感的网络图

今天给大家带来一款用来绘制有气泡感的网络图的工具函数,绘制效果如下: 花里胡哨的,气泡大小代表流入流出数据量综合,不同颜色的气泡代表属于不同类,两个气泡之间有连线代表有数据流动,连线透明度代表流动数…

木鱼cms 审计小结

MuYuCMS基于Thinkphp开发的一套轻量级开源内容管理系统,专注为公司企业、个人站长提供快速建站提供解决方案。‍环境搭建我们利用 phpstudy 来搭建环境,选择 Apache2.4.39 MySQL5.7.26 php5.6.9 ,同时利用 PhpStorm 来实现对项目的调试‍漏洞复现分析‍…

经过深思熟虑后的接口测试自动化的总结与思考

序近期看到阿里云性能测试 PTS 接口测试开启免费公测,本着以和大家交流如何实现高效的接口测试为出发点,本文包含了我在接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于:服务端接口测试介绍接…

中央一号文件首提“即时零售”,县域掀起消费业态新风潮

经过几年的探索,即时零售已经逐步走向成熟,并开始向三四线城市以及乡镇城市渗透。 过去一年,京东、美团、阿里争先布局即时零售市场,完善即时配送网络、培养用户消费习惯,即时零售订单迎来了骤增。2022年下半年&#…

【字节面试】Fail-fast知识点相关知识点

字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 1.问题 什么是Fail-fast机制? Hashmap是否拥…

斯坦福大学团队提出AI生成文本检测器DetectGPT,通过文本对数概率的曲率进行可解释判断

原文链接:https://www.techbeat.net/article-info?id4583 作者:seven_ 随着以ChatGPT等大型语言模型(large language models,LLMs)的爆火,学界和工业界目前已经开始重视这些模型的安全性,由于C…

DSP28系列 CCS 开发问题总结及解决办法

文章目录 问题汇总 1. CCS编译器的Project菜单栏工程导入选项丢失,怎么解决! 1.1启动CCS后发现导入工程菜单栏丢失,无法导入工程文件。 1.2方法一 工程选项的导入工程文件丢失,如果要重新获得相应的选项,就需要删除当前…

Java必备小知识点2——输入输出与变量

变量变量的实质假如将内存比喻成一座房子,存入内存就相当于住进房子。但是如果一个房间给了应人,他却不住,那么房间实际上是空着的,又属于个人,别人无法住进来,就会造成浪费。那么将内存比喻成酒店&#xf…

Cocoa-autoLayout

什么是autoLayout autoLayout的重新布局是通过 constraints 各个view实现自动布局,autoLayout重新调整布局view是在runtime中 autolayout without constraints 也就是通过stack view实现不引入复杂的constraints的情况下 还能使用autoLayout 什么是stack view …

SPDK NVMe-oF Target

SPDK NVMe-oF TargetNVMe协议制定了本机高速访问PCIe SSD的规范,相对于SATA、SAS、AHCI等协议,NVMe协议在带宽、延迟、IOps等方面占据了极大的优势,但是在价格上目前相对来讲还是比较贵的。不过不可否认的是,配置PCIe SSD的服务器…

软件供应链受威胁下的应对方法——供应链安全管理平台的五大工具能力

背景如今,软件供应链安全问题已经成为一个全球性的难题。根据数据统计,2017年全球遭受网络攻击的公司比例已经达到了93%,其中很大一部分是由于软件供应链安全问题导致的。而在中国,据统计,2019年全国共发生…

FlinkSQL行级权限解决方案及源码

FlinkSQL的行级权限解决方案及源码,支持面向用户级别的行级数据访问控制,即特定用户只能访问授权过的行,隐藏未授权的行数据。此方案是实时领域Flink的解决方案,类似离线数仓Hive中Ranger Row-level Filter方案。 源码地址: https…

不可变集合、Stream、异常、日志框架

创建不可变集合 什么是不可变集合?不可变集合,就是不可被修改的集合。集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变。否则报错。为什么要创建不可变集合?如果某个数据不能被修改,把它防御性地拷贝到…

交叉编译 SQLite

交叉编译 SQLite 概述 SQLite 是一个 C 语言库,它实现了一个小型、快速、自包含、高可靠性、功能齐全的 SQL 数据库引擎。SQLite 是世界上使用最多的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。 S…

java迷宫回溯找最短路径问题(多策略)

1、首先我们先明确迷宫,并创建如上图,1为墙,中间的1为挡板墙,由图我们可以看出这是一个二维数组/*** 创建地图* return*/public static int [][] createMap(){int [][] mapNew new int[8][7];//1表示墙,不能走for (in…

Kaggle系列之识别狗的品种类别(深度残差网络模型ResNet-34)

我们来到这个比赛页面:https://www.kaggle.com/competitions/dog-breed-identification这个数据集的目标是Determine the breed of a dog in an image(确定图像中狗的品种)我们先下载数据集解压之后来看下(当然不手动解压,也可以使用),这里我…

超全 Vue3新特性总结

Vue3 应用-技术分享与交流 新特性篇 Vue3 组合式 API VS Vue2 选项式 API 选项式 API 面临的问题: 我们在处理业务逻辑时,需要在 data computed method watch 中分别进行代码编写,碎片化使得理解和维护复杂组件变得困难。选项的分离掩盖了潜在的逻辑问…

百度工程师浅谈分布式日志

作者 | 文库基础架构 导读 我们做软件开发时,或多或少的会记录日志。由于日志不是系统的核心功能,常常被忽视,定位问题的时候才想起它。本文由浅入深的探讨不起眼的日志是否重要,以及分布式架构下的日志运维工具应该具备哪些能力&…

【单目标优化算法】海鸥优化算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…