Pythonでディレクトリ内のファイル一覧を取得する方法:os.listdir()とos.walk()の使い方を徹底解説
Pythonでファイルを扱っていると、「特定のディレクトリ内にどんなファイルがあるのか一覧を確認したい」という場面によく出会います。例えば、フォルダ内にあるPythonファイルだけを抽出したい場合などがその典型例です。
Pythonの標準ライブラリ「os」には、ディレクトリ内のファイルを一覧表示するための便利なメソッドが複数用意されています。この記事では、os.listdir()を使って指定したディレクトリ直下のファイルやフォルダを取得する方法と、os.walk()を使ってサブディレクトリまで含めたすべてのファイルを取得する方法を、具体例を交えながらわかりやすく解説します。
Pythonのosライブラリとは
osライブラリは、オペレーティングシステム(OS)を操作するためのさまざまな関数を提供するモジュールです。osモジュールに含まれる関数は、Windows、Linux、macOSなど、主要なOSであればどれでも同じように動作します。
osモジュールはあらかじめPythonに用意されていますが、コード内で使用する前にインポートしておく必要があります。インポートは次の1行で完了します。
import os
これでosライブラリの関数を使って、ディレクトリ内の項目を一覧できるようになりました。
os.listdir()でファイルとフォルダの一覧を取得する
os.listdir()メソッドは、指定したディレクトリ内のファイルとフォルダを一覧で返します。なお、このメソッドは、OSがディレクトリ間の移動に使う特別なエントリである「.」や「..」は返しません。
また、os.listdir()は最初の階層にあるファイルとフォルダしか返さない点にも注意が必要です。つまり、メソッドが見つけたサブフォルダの中身までは取得できません。サブディレクトリの中身まで取得したい場合は、後述するos.walk()を使用します。
os.listdir()の構文
os.listdir()関数は、引数として「ファイルとフォルダ名を取得したいディレクトリのパス」を1つ受け取ります。
os.listdir(path)
os.listdir()の使用例
ここで、過去10年間のNetflixの株価データを分析するプログラムを作成しているとしましょう。生データはすべて「/home/data_analysis/netflix」というフォルダに保存されており、プログラムを実行する前に、そのフォルダ内にraw_data_2019.csvというファイルが存在するかどうかを確認したいとします。
プログラムが正しく動作するには、この特定のファイルが特定のフォルダに保存されている必要があります。
そこで、次のコードを使えば、/home/data_analysis/netflixディレクトリ内のファイル一覧を取得できます。
import os path = '/home/data_analysis/netflix' files = os.listdir(path) for f in files: print(f)
このプログラムを実行すると、指定したディレクトリ内のすべてのファイルとフォルダの一覧が取得され、次のように出力されます。
README.md app.py raw_data_2016.csv raw_data_2017.csv raw_data_2018.csv raw_data_2019.csv processed_data
これで、raw_data_2019.csvがフォルダ内に存在するかどうかを確認できます。ご覧のとおり、きちんと存在していますね。
コードの解説
コードの内容を順番に見ていきましょう。まず1行目でosモジュールをインポートします。これはos.listdir()関数にアクセスするために必須の処理です。次に、取得したいパスの名前を格納するPython変数pathを宣言します。
その後、os.listdir()メソッドを使って、/home/data_analysis/netflixディレクトリ内のファイルとフォルダの一覧を取得します。最後に、Pythonのforループを作成し、os.listdir()が返したリストの各項目を順番に取り出して、print()文でコンソールにファイル名を出力しています。
/home/data_analysis/netflixディレクトリには6つのファイルと1つのディレクトリが含まれていました。ディレクトリの名前はprocessed_dataで、拡張子がないため他のファイルと簡単に区別できます。
os.walk()でサブディレクトリまで含めて一覧を取得する
os.walk()関数は、ディレクトリツリー内に含まれるファイルの一覧を取得します。このメソッドはツリー内の各ディレクトリを順番に走査し、ディレクトリとそのサブディレクトリ内にあるすべてのファイルとフォルダの名前を返します。
os.walk()の構文とパラメータ
os.walk()メソッドの構文は次のとおりです。
os.walk(top, topdown, onerror, followlinks)
os.walk()メソッドは4つのパラメータを受け取ります。
- top:走査を開始する最上位のディレクトリ。ここに含まれるファイルとフォルダ名を取得します(必須)
- topdown:Trueを指定すると上から下へ(トップダウン)、Falseを指定すると下から上へ(ボトムアップ)の順でディレクトリを走査します(省略可能)
- onerror:エラーが発生した際に呼び出されるエラーハンドラを指定します(省略可能)
- followlinks:Trueを指定すると、シンボリックリンクが参照するフォルダも訪問します(省略可能)
onerrorとfollowlinksはやや高度な機能で、使用頻度も高くないため、この記事では主に最初の2つのパラメータに焦点を当てて解説します。
os.walk()の使用例
今度は、/home/data_analysis/netflixディレクトリ内のすべてのファイル名に加えて、そのフォルダ内のサブディレクトリに含まれるファイルもすべて取得してみましょう。
前述のとおり、netflixディレクトリにはprocessed_dataというフォルダが1つ含まれています。次のコードを使えば、/home/data_analysis/netflixディレクトリとそのサブディレクトリ内のすべてのファイル名を取得できます。
import os path = '/home/data_analysis/netflix' for root, directories, files in os.walk(path, topdown=False): for name in files: print(os.path.join(root, name)) for name in directories: print(os.path.join(root, name))
このコードの出力結果は次のとおりです。
/home/data_analysis/netflix/README.md /home/data_analysis/netflix/app.py /home/data_analysis/netflix/raw_data_2016.csv /home/data_analysis/netflix/raw_data_2017.csv /home/data_analysis/netflix/raw_data_2018.csv /home/data_analysis/netflix/raw_data_2019.csv /home/data_analysis/netflix/processed_data /home/data_analysis/netflix/processed_data/final.csv
コードの解説
まずosモジュールをインポートします。後ほどコード内でos.walk()とos.path.join()という2つのメソッドを参照するためです。続いて、調べたいパスを格納する変数pathを宣言します。
次に、os.walk()を使ってpathディレクトリ内のすべてのファイルとフォルダの一覧を取得するforループを作成します。このループは、os.walk()が返すファイルとフォルダを順番に処理していきます。なお、ここではos.walk()メソッドにtopdown=Falseパラメータを指定しています。これにより、ディレクトリは下の階層から上の階層へ(ボトムアップ方式)で走査されます。
さらに、os.walk()が検出した各ファイルと各ディレクトリに対して、ネストしたforループで処理を行い、結果をコンソールに出力しています。該当する部分のコードは以下のとおりです。
for root, directories, files in os.walk(path): for name in files: print(os.path.join(root, name)) for name in directories: print(os.path.join(root, name))
そして、os.path.join()を使って、各ファイルのルートフォルダ(例:/home/data_analysis/netflix)とファイル名(例:raw_data_2019.csv)を連結しています。ルートフォルダとは、そのファイルが存在するディレクトリのパスのことです。
まとめ
Pythonでディレクトリ内のファイル一覧を取得するには、listdir()メソッドを使います。また、サブディレクトリの中身も含めてディレクトリ内のすべてを一覧表示したい場合は、walk()メソッドが便利です。
この記事では、具体例を交えながら、os.listdir()とos.walk()を使ってPythonでディレクトリ内のファイルやフォルダを一覧表示する方法を解説しました。これであなたも、プロのようにPythonでファイル一覧を扱えるようになったはずです。
Pythonの学習をさらに進めたい方は、ぜひ「Pythonの学び方」ガイドも参考にしてください。
-
Pythonでリストを逆順にする方法:reverse()・reversed()・スライスを徹底解説
Pythonでは、組み込みメソッドのreverse()やreversed()を使って、リストを簡単に逆順にできます。これらのメソッドは、元のリストオブジェクトの要素を反転させるための標準的な手段です。 はじめに リストの反転(リバース)は、あらゆるプログラミング言語で頻繁に使われる基本的な操作の一つです。このチュートリアルでは、Pythonでリストを逆順にする最も効果的な方法を、サンプルコードとともに詳しく解説します。 例えば、顧客名のリストが五十音の逆順になっていて、正しい順序で表示したいとしましょう。その場合はリストを反転する必要があります。また、長いリストの末尾にあるデータを素
-
Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説
Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し