Forked from bpeterso2000/dir_walk_with_depth_control.py
Created
September 1, 2018 11:35
-
-
Save zh794390558/5524087a7d3034109e91779eaf80471a to your computer and use it in GitHub Desktop.
Recursively walk a directory to a specified depth
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Reference: http://stackoverflow.com/questions/7159607 " | |
import os | |
import sys | |
def listdir(path): | |
""" | |
recursively walk directory to specified depth | |
:param path: (str) path to list files from | |
:yields: (str) filename, including path | |
""" | |
for filename in os.listdir(path): | |
yield os.path.join(path, filename) | |
def walk(path='.', depth=None): | |
""" | |
recursively walk directory to specified depth | |
:param path: (str) the base path to start walking from | |
:param depth: (None or int) max. recursive depth, None = no limit | |
:yields: (str) filename, including path | |
""" | |
if depth and depth == 1: | |
for filename in listdir(path): | |
yield filename | |
else: | |
top_pathlen = len(path) + len(os.path.sep) | |
for dirpath, dirnames, filenames in os.walk(path): | |
dirlevel = dirpath[top_pathlen:].count(os.path.sep) | |
if depth and dirlevel >= depth: | |
dirnames[:] = [] | |
else: | |
for filename in filenames: | |
yield os.path.join(dirpath, filename) | |
if __name__ == '__main__': | |
import argparse | |
parser = argparse.ArgumentParser() | |
parser.add_argument('path', nargs='?', default='.', help=( | |
"path to list files from (defaults to current directory)")) | |
parser.add_argument('-d', '--depth', type=int, default=0, help=( | |
"maximum level of sub-directories to decend" | |
"(defaults to unlimited).")) | |
parser.add_argument('-v', '--version', action='version', | |
version='%(prog)s ' + __version__) | |
args = parser.parse_args() | |
for filename in walk(args.path, args.depth): | |
print(filename) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment