相关文章推荐
文雅的牛肉面  ·  c# ...·  3 小时前    · 
坏坏的小狗  ·  visual c++ - C26495 ...·  1 年前    · 

Python中os.walk()的详细理解

反正最近文件夹名字操作要了我的老命,所以总结下这个方法的使用。

1. os.walk()参数的含义

  • root :Prints out directories only from what you specified.
  • dirs :Prints out sub-directories from root.
  • files :Prints out all files from root and directories.

只看英文理解的模模糊糊(文末有中文),用代码试试看咋回事咯!

2. 代码检验

先给出我的文件夹目录树形图 。
在这里插入图片描述

文件夹具体内容如下:
在这里插入图片描述

import os
# 操作的文件夹路径
operate_path = r"/media/hewenyong/my_file/soft/jupyter_workspace/mm"
for root, dirs, files in os.walk(operate_path):
    print('root:',root)
    print('dirs:',dirs)
    print('files:',files)
    print('\n')
*********************** 实验结果: *******************************
root: /media/hewenyong/my_file/soft/jupyter_workspace/mm
dirs: ['sss', 'hhh']
files: ['plaid_img_00006051.jpg', 'plaid_img_00006053.jpg', 'plaid_img_00006052.jpg']
root: /media/hewenyong/my_file/soft/jupyter_workspace/mm/sss
dirs: ['hewenyong']
files: ['cat.1.jpg', 'cat.0.jpg', 'cat.2.jpg']
root: /media/hewenyong/my_file/soft/jupyter_workspace/mm/sss/hewenyong
dirs: []
files: ['cat.93.jpg', 'cat.94.jpg', 'cat.92.jpg']
root: /media/hewenyong/my_file/soft/jupyter_workspace/mm/hhh
dirs: []
files: ['abstract_img_00028077.jpg', 'abstract_img_00028073.jpg', 'abstract_img_00028076.jpg', 'abstract_img_00028075.jpg', 'abstract_img_00028074.jpg']

可以看到输出了4次root、dirs、files

这是因为1个根目录(mm)、加上2个子目录(hhh,sss)、一个孙子目录(hewenyong)一共4个目录,所以会遍历4次。

2.1 先看第一次遍历:

root: /media/hewenyong/my_file/soft/jupyter_workspace/mm
dirs: ['sss', 'hhh']
files: ['plaid_img_00006051.jpg', 'plaid_img_00006053.jpg', 'plaid_img_00006052.jpg']
  • root:输出了mm文件夹的的绝对路径;
  • dirs:保存了mm文件夹下的所有子文件夹的目录名(只有一层)
  • files:则是一个保存了mm文件夹下的所有文件的文件名,并保存到list中

在这里插入图片描述
没什么问题!

2.2 再看第二次遍历:

root: /media/hewenyong/my_file/soft/jupyter_workspace/mm/sss
dirs: ['hewenyong']
files: ['cat.1.jpg', 'cat.0.jpg', 'cat.2.jpg']
  • root:输出了sss文件夹的的绝对路径;(这是mm文件夹的第一个子文件夹
  • dirs:保存了sss文件夹下的所有子文件夹的目录名(只有一层)
  • files:则是一个保存了sss文件夹下的所有文件的文件名,并保存到list中

在这里插入图片描述
没有问题!

2.3 再看第三次遍历:

root: /media/hewenyong/my_file/soft/jupyter_workspace/mm/sss/hewenyong
dirs: []
files: ['cat.93.jpg', 'cat.94.jpg', 'cat.92.jpg']

注意注意:他现在遍历的是sss的子文件夹hewneyong了,而并没有去遍历hhh!
注意注意:他现在遍历的是sss的子文件夹hewneyong了,而并没有去遍历hhh!
注意注意:他现在遍历的是sss的子文件夹hewneyong了,而并没有去遍历hhh!

  • root:输出了hewneyong文件夹的的绝对路径;(这是sss文件夹的第一个子文件夹
  • dirs:为空的list(因为hhh文件夹下没有子目录了)
  • files:则是一个保存了hewneyong文件夹下的所有文件的文件名,并保存到list中
    在这里插入图片描述

2.4 最后看第四次遍历:

root: /media/hewenyong/my_file/soft/jupyter_workspace/mm/hhh
dirs: []
files: ['abstract_img_00028077.jpg', 'abstract_img_00028073.jpg', 'abstract_img_00028076.jpg', 'abstract_img_00028075.jpg', 'abstract_img_00028074.jpg']
  • root:输出了hhh文件夹的的绝对路径;(这是mm文件夹的另一个子文件夹
  • dirs:为空的list(因为hhh文件夹下没有子目录了)
  • files:则是一个保存了hhh文件夹下的所有文件的文件名,并保存到list中

3. 总结

首先,os.walk会遍历我们指定的文件夹,这没什么问题!
每一层遍历:

  • root保存的就是当前遍历的文件夹的绝对路径
  • dirs保存当前文件夹下的所有子文件夹的名称(仅一层,孙子文件夹不包括
  • files保存当前文件夹下的所有文件的名称

其次,发现它的遍历文件方式,在图的遍历方式中,那可不就是深度遍历嘛!!!
吼吼,果然自己动手还是会有新发现!!!

<br />原来自己一直都是自己写一些Python的命令行小工具来简化工作中的一些重复工作,其中就有需要遍历一个目录的情况,原来自己一直是写递归程序做这件事,前两天才发现原来Python中就有现成做好的类库,真是汗颜。<br />这个函数就是os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])<br />具体用法:<br />import os for root, dirs, files in os.walk('/opt/'):
Python开发笔记开发工具篇前言VscodePycharmVisual StudioJupyter Lab/Jupyter NotebookAnaconda(集成工具)Python篇个人认为的重点前言个人总结机制线程(thread)和进程(multiprocess)1. 线程(threading)2. 项目23. 项目3socket通信服务器部署篇ubuntu系统部署linux系统自学 近日接触了一个python使用socket与阿里云服务器建立通信的项目,开发过程中查阅了很多资料,也总结了python使
os.walk函数本身只会遍历一次,即遍历整个目录树并返回所有文件和子目录的列表。如果你想控制os.walk函数只遍历某些特定的文件或目录,可以使用if语句来过滤掉不需要的文件或目录。 例如,以下代码只遍历根目录下的所有目录和.py文件: ```python import os root_dir = '/path/to/root/dir' for dirpath, dirnames, filenames in os.walk(root_dir): if not dirpath.startswith(root_dir): continue # 遍历所有.py文件 for filename in filenames: if filename.endswith('.py'): print(os.path.join(dirpath, filename)) 注意,以上代码仅供参考,具体的文件和目录过滤规则根据实际需求而定。
pip install第三方包 Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pipenv/:【解决方案】 45202
pip install第三方包 Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pipenv/:【解决方案】 2401_87442134: 谢谢大佬,成功了 git学习——快速解决git am冲突 CSDN-Ada助手: 不知道 CS入门 技能树是否可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml Ubuntu24.04换源方法(新版源更换方式,包含Arm64) qq_52721503: 很厉害啊 成功了 Ubuntu24.04换源方法(新版源更换方式,包含Arm64) #### KAI Sources: #Types: deb #URIs: http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ #Suites: noble noble-updates noble-security #Components: main restricted universe multiverse #Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg #中科大源 #Types: deb #URIs: http://mirrors.ustc.edu.cn/ubuntu/ #Suites: noble noble-updates noble-security #Components: main restricted universe multiverse #Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg #Types: deb #URIs: http://mirrors.163.com/ubuntu/ #Suites: noble noble-updates noble-security #Components: main restricted universe multiverse #Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://mirrors.aliyun.com/ubuntu/ Suites: noble noble-updates noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg