python os.walk_Python os.walk() 简介

os.walk目录遍历

每个月都有那么几天想划水,又到划水的日子了,今天分享的是刚在处理遍历目录相关用到的相关方法。

os.walk

os.walk的参数如下:

os.walk(top, topdown=True, οnerrοr=None, followlinks=False)

其中:

top是要遍历的目录。

topdown是代表要从上而下遍历还是从下往上遍历。

onerror可以用来设置当便利出现错误的处理函数(该函数接受一个OSError的实例作为参数),设置为空则不作处理。

followlinks表示是否要跟随目录下的链接去继续遍历,要注意的是,os.walk不会记录已经遍历的目录,所以跟随链接遍历的话有可能一直循环调用下去。

os.walk返回的是一个3个元素的元组 (root, dirs, files) ,分别表示遍历的路径名,该路径下的目录列表和该路径下文件列表。注意目录列表和文件列表不是具体路径,需要具体路径(从root开始的路径)的话可以用 os.path.join(root,dir) 和 os.path.join(root,dir) 。

例子

假设现在存在如下的文件和目录结构:

➜ test_os_walk git:(master) ✗ tree

.

├── a.py

├── b.py

├── c.py

├── dir1

│   ├── dir4

│   │   ├── g.py

│   │   └── h.py

│   ├── dirx

│   │   ├── diry

│   │   │   └── k.py

│   │   └── z.py

│   ├── e.py

│   ├── f.py

│   └── g.py

├── dir2

│   ├── dira

│   │   └── dirb

│   │   └── dirc

│   │   └── aha.py

│   ├── k.py

│   ├── l.py

│   └── m.py

└── dir3

├── dir5

│   └── z.py

├── x.py

└── y.py

10 directories, 17 files

测试topdown

当我用 os.walk 遍历这个目录时,程序和输出如下:

import os

path = '/Users/nisen/Projects/python_advanced_class/test/test_os_walk'

for root, dirs, files in os.walk(path, True):

print 'root: %s' % root

print 'dirs: %s' % dirs

print 'files: %s' % files

print ''

结果如下,从root的路径可以看出遍历是自上而下的:

➜ test git:(master) ✗ python test11.py

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk

dirs: ['dir1', 'dir2', 'dir3']

files: ['a.py', 'b.py', 'c.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1

dirs: ['dir4', 'dirx']

files: ['e.py', 'f.py', 'g.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4

dirs: []

files: ['g.py', 'h.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx

dirs: ['diry']

files: ['z.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry

dirs: []

files: ['k.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2

dirs: ['dira']

files: ['k.py', 'l.py', 'm.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira

dirs: ['dirb']

files: []

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb

dirs: ['dirc']

files: []

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc

dirs: []

files: ['aha.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3

dirs: ['dir5']

files: ['x.py', 'y.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5

dirs: []

files: ['z.py']

而当设置os.walk的topdown为False时,结果如下, 可以看出他是自上而下遍历的:

➜ test git:(master) ✗ python test11.py

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dir4

dirs: []

files: ['g.py', 'h.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx/diry

dirs: []

files: ['k.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1/dirx

dirs: ['diry']

files: ['z.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir1

dirs: ['dir4', 'dirx']

files: ['e.py', 'f.py', 'g.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb/dirc

dirs: []

files: ['aha.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira/dirb

dirs: ['dirc']

files: []

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2/dira

dirs: ['dirb']

files: []

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir2

dirs: ['dira']

files: ['k.py', 'l.py', 'm.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3/dir5

dirs: []

files: ['z.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk/dir3

dirs: ['dir5']

files: ['x.py', 'y.py']

root: /Users/nisen/Projects/python_advanced_class/test/test_os_walk

dirs: ['dir1', 'dir2', 'dir3']

files: ['a.py', 'b.py', 'c.py']

运行时修改遍历目录

当topdown设置为True时,可以在处理时修改返回的 dirs 列表,这样可以遍历下面的目录时会根据修改后的 dirs 来遍历。比如下面的例子,在遍历的时候不把"CSV"目录包括在内:

import os

from os.path import join, getsize

for root, dirs, files in os.walk('python/Lib/email'):

print root, "consumes",

print sum(getsize(join(root, name)) for name in files),

print "bytes in", len(files), "non-directory files"

if 'CVS' in dirs:

dirs.remove('CVS') # don't visit CVS directories

参考资料

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

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

相关文章

python pdf转word 表格_太赞了!Pdf转Word,我用Python 轻松搞定表格和水印!

原标题:太赞了!Pdf转Word,我用Python 轻松搞定表格和水印!继上一次为大家推出了将pdf转word之后(卧槽!Pdf转Word用Python轻松搞定!),引起了大家的热烈讨论,我也总结了大家的一些意见…

dao传递类参数 mybatis_Mybatis (ParameterType) 如何传递多个不同类型的参数

偶然碰到一个需要给xml传一个String类型和一个Integer类型的需求,当时心想用map感觉有点太浪费,所以专门研究了下各种方式。方法一:不需要写parameterType参数public List getXXXBeanList(String xxId, String xxCode);select t.* from table…

semantic ui中文文档_Vuetify-广受欢迎的Material风格的开源UI框架

全世界范围内广受欢迎的 Vue UI 框架,一个非常精致的 Material Design UI 套件。 Material Design 风格 UI 框架Vuetify 是一个基于 Vue.js 精心打造 UI 组件库,整套 UI 设计为 Material 风格。能够让没有任何设计技能的开发者创造出时尚的 Material 风格…

java 异常捕获抛出_JAVA异常处理捕获与抛出原理解析

JAVA 异常当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常。异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常。这个时候,JAVA 就提供了优秀的处理方法:异常处理异常处理能让程序在异…

提示tun虚拟网卡没有安装_Win10家庭版通过Hyper-V安装Centos7+Python3.7过程总结

Win10专业版自带有虚拟机Hyper-V, 只需要在控制面板--程序中将其添加到应用就可使用,非常方便,但我电脑预装的是Win10家庭版,没有这个工具,但可以通过以下方法把它安装上:新建文件Hyper-V.cmd,文件内容&…

python自动输入_使用Python和pywin32自动输入数据

我正在尝试编写一个python脚本来获取数据并将其输入任何形式以下是我目前为止的代码:def pasteNum(n):win32clipboard.OpenClipboard()win32clipboard.EmptyClipboard()win32clipboard.SetClipboardData(win32con.CF_TEXT, str(n))##CTRL-Awin32api.keybd_event(win…

nginx 带宽_谈谈Nginx和LVS各自的优缺点以及使用

在最开始呢,咱们先说一下什么叫负载均衡,负载均衡呢,就是将一批请求,根据请求的内容,分发到不同的后端去进行相应的处理,从而提供负载分担,主备切换等功能。对于不同的负载均衡软件,…

java 读取 excel poi_Java中读取Excel功能实现_POI

这里使用apache的poi进行读取excel1,新建javaproject 项目:TestExcel2,导入包导入根目录下、lib、ooxml-lib下的所有jar4,操作读取excelimport java.io.File;import java.io.IOException;import java.util.Iterator;import org.ap…

wordpress 自定义分类url 重写_WordPress导航主题-WebStack导航主题

8月份写了一个导航主题,陆陆续续更新了十几版,功能自认已经很完善了,知乎也注册很久了,在这水片文章。首页截图预览地址一为忆 - 收集国内外优秀设计网站、UI设计资源网站、灵感创意网站、素材资源网站,定时更新分享优…

mysql hbase 同步_HBase 简介和使用 Sqoop 同步 Mysql 数据到 HBase

HBase 数据模型Namespace: 命名空间类似于关系型数据库中的 database schemaTable: 表一个 Namespace 下有多个表,一个表可以包含多个行Row: 行在 HBase 中 Row 由一个 Row Key 和一个或多个列及其值组成,数据值的存储按照 Row Key 的字典顺序存储的。Co…

sql跨表查询_白话django之ORM的查询语句

教程源码:z991/django_turital在日常开发中,数据库的增删改查(CDUR)中,查询需求偏多,所以查询的语法比增删改操作多得多,尤其是跨表关联查询,可以让代码精简很多年。直接上代码吧&am…

java对象怎么创建_java对象是怎么创建出来的

1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。Employee emp1 new Employee();0: new #19 // class org/programming/mitra/exercises/Employee3: dup4: invokespecial #21 // Method org/…

看不懂论文代码怎么办_学位论文中的公式排版(制表位+mathtype+域)

写在前面为什么把公式排版单独拉出来写一篇文章呢?因为公式排版实在是太难了。公式居中标号右对齐,简直反人类好么。在学校期间一直寻找方便的公式排版自动编号方法,但搜索出来的大多只是用到了制表位,公式标号还要自己敲。最后毕…

利用trunk实现vlan内通信_实现不同VLAN间通信——单臂路由

单臂路由是一种实现不同VLAN间通信的技术,其方法是在虚拟机内接口上配置虚拟子接口。该技术是一种应急技术,仅仅用于网络预算不足,无力购买三层交换机,或者网络规模很小的情况下使用。一、实验路由器只需要一个端口和交换机(二层)…

java dispatchevent_java事件处理机制

java中的事件机制的参与者有3种角色:1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中2.event source:具体的接受事件的实体&#xff0…

eq值 推荐算法_C++实现十种排序算法

十种排序算法&#xff1a;选择排序插入排序冒泡排序希尔排序快速排序的三种实现方法归并排序堆排序&#xff08;大顶堆&#xff09;计数排序基数排序&#xff08;待实现&#xff09;桶排序&#xff08;待实现&#xff09;#include <bits/stdc.h> using namespace std; vo…

python读取tiff文件进行波段计算_python+tifffile之tiff文件读写方式

背景使用python操作一批同样分辨率的图片&#xff0c;合并为tiff格式的文件。由于opencv主要用于读取单帧的tiff文件&#xff0c;对多帧的文件支持并不好。通过搜索发现了两个比较有用的包&#xff1a;TiffCapture和tifffile。两者都可用pip安装。其中前者主要用于读取tiff文件…

java 线程停止在那个为止_java停止线程

本文将介绍jdk提供的api中停止线程的用法。停止一个线程意味着在一个线程执行完任务之前放弃当前的操作&#xff0c;停止一个线程可以使用Thread.stop()方法&#xff0c;但是做好不要使用它&#xff0c;它是后继jdk版本中废弃的或者将不能使用的方法&#xff0c;大多数停止一个…

java中的action是指什么_Struts2【开发Action】知识要点

前言前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理Action开发的三种方式在第一次我们写开发步骤的时候&#xff0c;我们写的Action是继承着ActionSupport类的...为啥我们继承了ActionSupport类呢&#xff1f;下面我就会讲解到继承Action…

hql 查询条件 set集合_Redis从入门到深入-Sorted_set的value

1. sorted_set 类型新的存储需求&#xff0c;数据排序有利于数据的有效展示&#xff0c;需要提供一种可以根据自身特征进行排序的方式需要的存储结构&#xff1a;新的存储模型&#xff0c;可以保存可排序的数据sorted_set类型&#xff1a;在set的存储结构基础上添加可排序字段2…