python os.walk 指定遍历深度_os.walk 如何设置遍历层级?
仿照 os.walk 寫了一個 generator lwalk, 他的行為如同 os.walk 但是多了一個 max_level 可以控制最大的遍歷深度, 為了與 os.walk 盡量吻合, 我也實作了 topdown 和 followlinks 這兩個 arguments, 但為了不使 code 太過複雜, 我省略了 onerror 參數的實作以及若干 error handling。
代碼如下:
import os
def lwalk(top, topdown=True, followlinks=False, max_level=None):
if max_level is None:
new_max_level = None
else:
if max_level==0:
return
else:
new_max_level = max_level-1
top = os.fspath(top)
dirs, nondirs, walk_dirs = [], [], []
with os.scandir(top) as it:
for entry in it:
if entry.is_dir():
dirs.append(entry.name)
else:
nondirs.append(entry.name)
if not topdown and entry.is_dir():
if followlinks or not entry.is_symlink():
walk_dirs.append(entry.path)
if topdown:
yield top, dirs, nondirs
for dirname in dirs:
new_path = os.path.join(top, dirname)
if followlinks or not os.path.islink(new_path):
yield from lwalk(new_path, topdown, followlinks, new_max_level)
else:
for new_path in walk_dirs:
yield from lwalk(new_path, topdown, followlinks, new_max_level)
yield top, dirs, nondirs
簡單的範例如下:
for root, dirs, files in lwalk('YOUR_TOP_PATH', max_level=4):
print(root, dirs, files)
一些說明:
核心在於使用 os.scandir 來保證系統遍歷的效率
使用 max_level 來控制最大遍歷深度, 在 recursively 進入下一層的時候, 將最大深度減 1
要實作 buttom up, 則需先 recursively 進入下一層再 yield 目錄與文件
這邊有一個省略掉 topdown, followlink 和若干處理的簡單版本, 可以幫助你觀察一下核心的實作手段:
import os
def lwalk(top, max_level=10000):
if max_level==0:
return
dirs, nondirs = [], []
with os.scandir(top) as it:
for entry in it:
if entry.is_dir():
dirs.append(entry.name)
else:
nondirs.append(entry.name)
yield top, dirs, nondirs
for dirname in dirs:
new_path = os.path.join(top, dirname)
yield from lwalk(new_path, max_level-1)
for root, dirs, files in lwalk('a', max_level=4):
print(root, dirs, files)
python os.walk 指定遍历深度_os.walk 如何设置遍历层级?相关推荐
- python os.walk 指定遍历深度_python遍历文件夹,指定遍历深度与忽略目录的方法
背景 需要在文件夹中搜索某一文件,找到后返回此文件所在目录.用最常规的os.listdir()方式实现了一版,但执行时报错:递归超过最大深度.于是自己添加了点功能,之所有写此函数是为了让它适应不同的项 ...
- python os.walk遍历目录_python中os.walk()遍历目录中所有文件
之前一直用判断目录和文件的递归方法来获取一个目录下的所有文件,后来发现python里面已经写好了这个函数,不需要自己递归获取了,记录下os.walk()函数的用法 目的:获取path下所有文件,返回由 ...
- Python os.walk() 方法遍历文件目录
概述 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 在Un ...
- python os.walk_Python os.walk() 简介
os.walk目录遍历 每个月都有那么几天想划水,又到划水的日子了,今天分享的是刚在处理遍历目录相关用到的相关方法. os.walk os.walk的参数如下: os.walk(top, topdow ...
- Python os.walk() 方法--输出在目录中的文件名
概述 os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. 语法 ...
- python os.walk()
os.walk(),在目录树中游走,输出目录中的文件名 os.walk(top,topdown,onerror,followlinks) top--需要遍历的目录地址,返回的是一个三元组(root,d ...
- python: os.walk() 相关操作
os.walk(): 通过在目录树中游走输出在目录中的文件名,向上或者向下 ## 语法格式 os.walk(top[, topdown=True[, onerror=None[, followlink ...
- Python os.chdir() 方法用于改变当前工作目录到指定的路径。
Python os.chdir() 方法 正在上传-重新上传取消 Python OS 文件/目录方法 概述 os.chdir() 方法用于改变当前工作目录到指定的路径. 语法 chdir()方法语法 ...
- python来进行图的深度遍历和广度遍历
python来进行图的深度遍历和广度遍历 # -*- coding: utf-8 -*- """ Created on Sat Sep 14 18:01:27 2019@ ...
最新文章
- java中ArrayList
- android 登录组件开发,Android组件化开发路由的设计
- ubuntu 10.10 安装 oracle 11G
- python获取ftp所有文件名_在Python中获取最新的FTP文件夹名称
- linux qemu 报错 Unable to reserve 0xfffff000 bytes of virtual address space at 0x1000 解决方法
- 学习Python语言 基础语法:变量的基本使用
- Linux--DHCP
- 2021-03-01 Matlab 多项式的根求解
- 鼠标控制视角wasd移动_无线款,轻量级,稳控制:雷蛇(Razer) 毒蝰终极版鼠标的快速体验...
- IPv4 和 IPv6 有什么区别
- 新生代的他们,正在续写“黑客”传奇
- Linux下rpm安装软件
- GB35114-SIP部分技术预研
- 计算机常用计算单位换算关系,计算机单位换算
- Nexmo 短信平台接口 遇到的坑
- markdown编辑器——文字颜色、大小、字体、背景色、图片大小与居中对齐的设置方法
- 阐述免费增值游戏的设计特点及注意事项
- 计算机组成原理知识点2
- python编程超市购物系统_淘淘购物系统 (Python)
- 关于AQS中的enq方法的理解