pythonを使用して、他のソフトウェアをバッチで実行するために必要なファイルを作成しようとしています。このため、必要なデータファイルをソフトウェアにロードするテキストファイルを作成する必要があります。問題は、このテキストファイルに入力する必要があるファイルが、一連の構造化フォルダーに格納されていることです。
一連のフォルダー(最大20)をループする必要があります。各フォルダーには、必要なファイルを含む最大3つのフォルダーを含めることができます。フォルダーの最下位レベルには、ソフトウェアの実行ごとに必要なファイルのセットが含まれています。テキストファイルには、これらのファイルのパスと名前が1行ずつ印刷され、命令行が追加され、すべてのサブレベルフォルダーがチェックされるまで、フォルダーから次のファイルセットに移動する必要があります。
Os.walk()を使用します。以下は、「dir」のサブディレクトリ内のすべてのファイルのリストを出力します。結果は、ニーズに合わせて操作できます。
import os
def list_files(dir):
r = []
subdirs = [x[0] for x in os.walk(dir)]
for subdir in subdirs:
files = os.walk(subdir).next()[2]
if (len(files) > 0):
for file in files:
r.append(subdir + "/" + file)
return r
チャールズの答えは良いですが、速度と効率を高めるために改善することができます。 os.walk()によって生成される各アイテムは、3つのアイテムのタプルです。それらのアイテムは次のとおりです。
これを知って、Charlesのコードの多くはforloopの修正で凝縮できます:
import os
def list_files(dir):
r = []
for root, dirs, files in os.walk(dir):
for name in files:
r.append(os.path.join(root, name))
return r