os-path-walk-example.py

# -*- coding: utf-8 -*-

# @Date    : 2018-10-22
# @Author  : Peng Shiyu

# 使用os.path 搜索文件系统

import os

def get_files(top="."):
    """
    获取路径下所有文件
    """
    for root, dirs, files in os.walk(top):
        for filename in files:
            yield os.path.join(root, filename)

def get_dirs(top="."):
    """
    获取路径下所有文件夹
    """
    for root, dirs, files in os.walk(top):
        for directory in dirs:
            yield os.path.join(root, directory)

# 使用os.listdir 搜索文件系统
def get_files_(directory="."):
    stack = []
    stack.append(directory)
    while stack:
        current = stack.pop()
        for filename in os.listdir(current):
            fullname = os.path.join(current, filename)
            if os.path.isdir(fullname) and not os.path.islink(fullname):
                stack.append(fullname)
            else:
                yield fullname

# 使用DirectoryWalker 搜索文件系统

class DirectoryWalker():
    def __init__(self, directory):
        self.stack = [directory]
        self.index = 0
        self.files = []

    def __getitem__(self, index):
        while True:
            try:
                filename = self.files[self.index]
                self.index += 1

            except IndexError:
                self.directory = self.stack.pop()
                self.files = os.listdir(self.directory)
                self.index = 0

            else:
                fullname = os.path.join(self.directory, filename)

                if os.path.isdir(fullname) and not os.path.islink(fullname):
                    self.stack.append(fullname)

                return filename

if __name__ == '__main__':

    for filename in DirectoryWalker("."):
        print(filename)