作業をしているとサブディレクトリを含む全てのファイル名を取得したい場合があると思います。
ここではPythonにおけるglob、osを用いたファイル名の取得方法について解説しています。
この記事の対象
行ったこと
ファルダ内にあるexcelファル名を取得して出力しました。
globを用いた場合
カレントディレクトリのみ
import glob
#1---フォルダ内のxlsxファイルの一覧を取得
files = sorted(glob.glob('*.csv'))
print(files)
ファイルの一覧を取得するには「glob()」関数を用いることが簡単です。
「glob.glob(‘*.csv’)」として、フォルダ内の全てのcsvファイルを指定しています。「sorted()」関数では出力時、見やすいように並び替えをしています。
最後に出力です。
結果
['7731_2010.csv', '7731_2011.csv', '7731_2012.csv', '7731_2013.csv', '7731_2014.csv', '7731_2015.csv', '7731_2016.csv', '7731_2017.csv', '7731_2018.csv', '7731_2019.csv', '7731_2020.csv']
サブディレクトリを含む
import glob
for f in glob.glob("./**/*.*", recursive=True):
print(f)
サブディレクトリ内のファイル名を取得したい場合は、引数にpath(ワイルドカードを用いて)と「recursive」をTrueにする事で簡単に取得できます。
osを用いた場合
import os
#1---ファイルを検索するルートディレクトリのパス
root_dir = r'C:\hoge\hoge\src'
#2---ルートディレクトリ以下の全てのファイルを取得
for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
#3---ファイルパスを取得
file_path = os.path.join(dirpath, filename)
print(file_path)
上記のコードでは、os.walk()メソッドを使用して、指定されたルートディレクトリ以下の全てのファイルを再帰的に検索しています。
以下は解説になります。
#1---ファイルを検索するルートディレクトリのパス
root_dir = r'C:\hoge\hoge\src'
1の部分ではディレクトリを指定しています。
#2---ルートディレクトリ以下の全てのファイルを取得
for dirpath, dirnames, filenames in os.walk(root_dir):
2の部分ではos.walk()メソッドを用いてファイル名を取得しています。
#3---ファイルパスを取得
file_path = os.path.join(dirpath, filename)
print(file_path)
最後にファイルのpathを作成して出力しています。