日常の開発では、「ディレクトリまたはフォルダー」内に必要なファイルやフォルダーがあるかどうかを確認する必要があることがよくあります。次の記事では、Python が再帰と walk() を使用してディレクトリファイルを走査する方法を主に紹介します。
方法 1: 再帰呼び出し:[html] view plain copy #!/usr/bin/python #coding:utf8 import os def dirlist(path, allfile): filelist = os.listdir(path) for filename in filelist: filepath = os.path.join(path, filename) if os.path.isdir(filepath): dirlist(filepath, allfile) else: allfile.append(filepath) return allfile print dirlist("/home/yuan/testdir", [])
方法 2:
generator オブジェクトを使用してディレクトリ ツリー全体を走査します。 top はディレクトリの最上位レベルを指定し、topdown はディレクトリを上から下 (デフォルト値) に移動するか、下から上に移動するかを示すブール値です。返されたジェネレーターはタプル (dirpath、dirnames、filenames) を生成します。ここで、dirpath はディレクトリへのパスを含む
文字列、dirnames は dirpath 内のすべてのサブディレクトリのリスト、filename は dirpath A 内のファイルの名前です。ディレクトリを除くリスト。 oneerror 引数は、単一の引数を受け入れる関数です。 処理中にエラーが発生した場合、この関数は os.error オプションを使用して呼び出されます。デフォルトの動作では、エラーは無視されます。ディレクトリが上から下にトラバースされる場合、ディレクトリ名を変更するとトラバース プロセスに影響します。
[python] view plain copy #!/user/bin/python #!conding=utf8 import os g = os.walk("/home/yuan/testdir") for path,d,filelist in g: print d; for filename in filelist: print os.path.join(path, filename)
再帰的思考 をたどる方法、もう 1 つは os モジュール の walk() 関数です。以下で説明することはあまりありません。詳細な紹介で:
1. 再帰メソッド
#coding:utf-8 import os allfile=[] def getallfile(path): allfilelist=os.listdir(path) for file in allfilelist: filepath=os.path.join(path,file) #判断是不是文件夹 if os.path.isdir(filepath): getallfile(filepath) allfile.append(filepath) return allfile if name == 'main': path="C:\Users\zs\PycharmProjects\demo" allfiles=getallfile(path) for item in allfiles: print item #结果 C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt
2.os モジュールの walk() 関数
os.walk(top, topdown=True, onerror=None, followlinks=False)
dirnames、filenames)、
#coding:utf-8 import os def getallfiles(path): allfile=[] for dirpath,dirnames,filenames in os.walk(path): for dir in dirnames: allfile.append(os.path.join(dirpath,dir)) for name in filenames: allfile.append(os.path.join(dirpath, name)) return allfile if name == 'main': path = "C:\Users\zs\PycharmProjects\demo" allfile=getallfiles(path) for file in allfile: print file #输出结果 C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po
概要
2つのメソッドの入力結果は同じです。ただし、入力の順序が異なります。それに比べて、PythonのOSモジュールのwalk()メソッドは比較的シンプルな気がします以上がPythonでディレクトリとファイルを再帰的に走査する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。