「 このディレクトリにあるファイル一覧がほしいな」って思ったことございませんか!?
今日はそんな時に便利な方法を、Pythonにある「yield」を使って取得していく方法をご紹介したいと思います!
yieldって?
「yield」を使うと、関数の処理一時停止しデータを返す事ができます!「return」の場合は関数の処理を終了してデータを返すので、似ているようで結構違います。
今回の様にファイル一覧が欲しい時、「return」を使う場合は、ファイル一覧のデータを作成しますね。例えば10000個のファイルがあった場合は、10000個の要素があるリストデータを生成します。
一方「yield」の場合は、関数を処理中に、データを返し一時停止、また再開してデータを返し一時停止を繰り返すので、10000個の要素があるリストデータ生成する必要がありません。って言うことは大きなメモリ消費がないっということですね!(*´ω`*)b
os.walk
指定されたディレクトリにあるファイルを調べるには、「os.walk」を使うといいと思います。試しに使ってみると、この様になります。
import os for root, dirs, files in os.walk(r'C:\Users\owner\Documents\maya\projects\default'): print root print dirs print files print '+' * 100
実行してみると、こんな感じです。(ちょっと長いので省略しています。)
C:\Users\owner\Documents\maya\projects\default ['assets', 'autosave', 'cache', 'clips', 'data', 'images', 'movies', 'renderData', 'sceneAssembly', 'scenes', 'scripts', 'sound', 'sourceimages', 'Time Editor'] ['workspace.mel'] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C:\Users\owner\Documents\maya\projects\default\assets [] [] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C:\Users\owner\Documents\maya\projects\default\autosave [] [] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C:\Users\owner\Documents\maya\projects\default\cache ['bifrost', 'nCache', 'particles'] [] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ディレクトリの位置、そこにあるディレクトリ、ファイルが表示されます。
ファイル一覧
先程の「os.walk」の「files」を更に繰り返し処理し、「yield」を使って「データを返し一時停止」を繰り返す関数を作ってみます。(`・ω・´)ゞ
# 指定されたディレクトリ以下の、ファイルを検索する関数 def getDirectryTree(rootDir): # 指定されたディレクトリ以下を、走査する。 for root, dirs, files in os.walk(rootDir): # ファイルを1つずつ処理する for file in files: # パスを組み立てて、一旦返す yield os.path.join(root, file)
「return」の場合と違い、巨大なリストを作ったりしなくていいのでイイですね!(*´ω`*)b
この関数を使って、ファイル一覧をprintする場合は、この様になります!
import os def getDirectryTree(rootDir): # 指定されたディレクトリ以下を、走査する。 for root, dirs, files in os.walk(rootDir): # ファイルを1つずつ処理する for file in files: # パスを組み立てて、一旦返す yield os.path.join(root, file) for file in getDirectryTree(r'C:\Users\owner\Documents\maya\projects\default'): print file