Pythonでのファイル遍歴の2つの方法
1038 ワード
Pythonのファイル遍歴については、2つの方法があります.1つは便利なosです.walk()は、osを利用するものもあります.listdir()再帰遍歴.
方法1:osを利用する.walk
os.walkは、ファイルツリー全体を上から下へまたは下から上へ遍歴する、3つの要素を含むtuple、(dirpath,dirnames,filenames)を返し、osに注意する.walk()はgeneraterを返すので、呼び出すときは必ずforループに入れます.
方法2:osを利用する.listdir()
この方法も簡単で、ディレクトリをリストしてフォルダかどうかを判断し、そうでなければ直接ファイルパスに戻り、そうであれば再帰的に呼び出す.
ここで特筆すべきは、関数にyieldが使用されているため、generaterとみなされ、再帰呼び出し時にforループに置く必要があります.そうしないと、関数は実際に実行されません.最新のPython 3.3にはyield from構文が導入されており,上記の問題を解決することができる.
方法1:osを利用する.walk
os.walkは、ファイルツリー全体を上から下へまたは下から上へ遍歴する、3つの要素を含むtuple、(dirpath,dirnames,filenames)を返し、osに注意する.walk()はgeneraterを返すので、呼び出すときは必ずforループに入れます.
import os
def walk_dir(dirname):
for root,dirs,files in os.walk(dirname):
for f in files:
yield os.path.join(root, f)
方法2:osを利用する.listdir()
この方法も簡単で、ディレクトリをリストしてフォルダかどうかを判断し、そうでなければ直接ファイルパスに戻り、そうであれば再帰的に呼び出す.
import os
def walk_dir2(dirname):
for d in os.listdir(dirname):
path = os.path.join(dirname, d)
if os.path.isdir(path):
#note recursive in for...in...
for f in walk_dir2(path):
yield f
else:
yield path
ここで特筆すべきは、関数にyieldが使用されているため、generaterとみなされ、再帰呼び出し時にforループに置く必要があります.そうしないと、関数は実際に実行されません.最新のPython 3.3にはyield from構文が導入されており,上記の問題を解決することができる.