From 061f56a14d3e9784e66d77982884c74ce4d7885c Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 14 May 2014 20:39:31 +0300 Subject: [PATCH] os: Implement walk(). --- os/os/__init__.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/os/os/__init__.py b/os/os/__init__.py index 2e7b4659..cadc25e1 100644 --- a/os/os/__init__.py +++ b/os/os/__init__.py @@ -2,6 +2,7 @@ import ffi import array import struct import errno +import stat as stat_ try: from _os import * except: @@ -81,6 +82,24 @@ def listdir(path="."): res.append(fname) return res +def walk(top, topdown=True): + files = [] + dirs = [] + for dirent in ilistdir_ex(top): + mode = dirent[3] << 12 + fname = str(dirent[4].split('\0', 1)[0], "ascii") + if stat_.S_ISDIR(mode): + if fname != "." and fname != "..": + dirs.append(fname) + else: + files.append(fname) + if topdown: + yield top, dirs, files + for d in dirs: + yield from walk(top + "/" + d, topdown) + if not topdown: + yield top, dirs, files + def read(fd, n): buf = bytearray(n) r = read_(fd, buf, n)