再帰関数を勉強してみる

再帰関数があんまり理解できていないので、例題を解きながら勉強する

737 views

なにやるの?

こんな感じのフォルダがあるとする。
これを再帰で検索してみる!!

ゴールのイメージ

出力

スペースとかを利用してフォルダ構成をわかりやすく出力する。

前提

  • ルートディレクトリ(Sampleのディレクトリ)は「C:Users\ユーザー名」直下に配置する。
    ※ Sampleディレクトリのパスは「C:Users\ユーザー名\Sample」となる。

まずはSampleのディレクトリを取得

まずは、ルートディレクトリを取得する。

コード

import os

sample = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Sample')
baseDir = os.listdir(path = sample)

print(baseDir)

出力

さてここからが本題検索!

まずはコード

コード

まずは、それっぽいものを書いてみた。

import os

#ベースになるフォルダとパス
basePath = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Sample')
baseDir = os.listdir(path = basePath)

#フォルダを検索する処理
def searchDir(dir,path):
 #取得したファイル数行う
    for i in dir:
        try:
         #こっちはフォルダだった時の処理
         #探索するパスを作成
            newPath = path + '//' + i
         #新しいフォルダを取得
            newDir = os.listdir(path = newPath)
         #出力
            print('[フォルダ]',i)
         # 取得したフォルダ直下を検索
            searchDir(newDir,newPath)
        except:
             # ファイルを取得したとき
            print('-',i)
            pass


searchDir(baseDir,basePath)

出力

思ったよりうまくいってるね。
後はスペースとったりして見やすくしたいね。

ってことで少し改修

コード

import os

basePath = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Sample')
baseDir = os.listdir(path = basePath)

def searchDir(dir,path,cnt):
    j = 1
    space = '  '
    while j <cnt :
        space +='   '
        j += 1

    for i in dir:
        try:
            newPath = path + '//' + i
            newDir = os.listdir(path = newPath)
            print(space + i)
            searchDir(newDir,newPath,cnt+1)
        except:
            print(space + i)
            pass



searchDir(baseDir,basePath,1)

出力

それっぽくなった!!

Page 2 of 3.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

owl

自己紹介

駆け出しエンジニア
だいたいweb系をかじってる
最近ちょとブロックチェーンに興味出てきた

サイト/ブログ

https://github.com/owl0109

ツイッター

@kijiken1