Pythonを使うと、フォルダの中にあるファイルやディレクトリを簡単に取得できます。本記事では、Pythonでディレクトリ一覧を取得する方法を初心者向けにわかりやすく解説し、実務でも使えるテクニックや注意点も紹介します。
なぜディレクトリ一覧の取得が必要なのか
プログラムを作成していると「このフォルダの中にあるファイルをすべて処理したい」と思う場面が多くあります。例えば、大量のCSVデータを一括で読み込みたいときや、画像ファイルを順番に処理したいときなどです。手作業でファイル名を指定するのは非効率です。しかし、Pythonを使えば自動でディレクトリの中身を取得できるため、作業効率が飛躍的に上がります。また、定期的なバックアップやログファイルの管理にも応用できるため、知っておくと便利です。
基本の方法:os.listdirを使う
最もシンプルにディレクトリ一覧を取得できるのは、os.listdir()
です。指定したディレクトリの中にあるファイルやフォルダ名をリストとして返してくれます。
import os
dir_path = "./sample"
files = os.listdir(dir_path)
print(files)
このコードを実行すると、["a.txt", "b.csv", "images"]
のようにリスト形式で結果が返ります。とても直感的で使いやすいのですが、サブディレクトリの中までは自動的に取得できない点に注意が必要です。
応用編:os.scandirで詳細情報を取得する
os.scandir()
を使うと、ファイル名だけでなくファイルの種類や属性も取得できます。さらに、反復処理(イテレータ)として扱えるため、大量のファイルを扱うときにパフォーマンス面で有利です。
import os
dir_path = "./sample"
with os.scandir(dir_path) as entries:
for entry in entries:
if entry.is_file():
print(f"ファイル: {entry.name}")
elif entry.is_dir():
print(f"ディレクトリ: {entry.name}")
このようにすれば、ファイルかディレクトリかを簡単に区別できます。さらに、更新日時やサイズなどのメタ情報も取得できるため、実務的な処理に役立ちます。
サブディレクトリも含めて一覧を取得する方法
ディレクトリ内だけでなく、その中のサブディレクトリまで探索したい場合はos.walk()
が便利です。この関数を使うと、階層構造を再帰的にたどりながら一覧を取得できます。
import os
dir_path = "./sample"
for root, dirs, files in os.walk(dir_path):
print(f"現在のディレクトリ: {root}")
print("サブディレクトリ:", dirs)
print("ファイル:", files)
このコードでは、ルートディレクトリ以下すべてのフォルダを再帰的に探索して一覧化します。大量のデータを扱うときにも有効ですが、処理が重くなる可能性があるため注意が必要です。
よりPythonicに:pathlibを使う
Python3.4以降では、pathlib
モジュールが推奨されています。これはオブジェクト指向的にパスを扱えるライブラリで、コードが読みやすくなります。
from pathlib import Path
dir_path = Path("./sample")
for path in dir_path.iterdir():
if path.is_file():
print(f"ファイル: {path.name}")
elif path.is_dir():
print(f"ディレクトリ: {path.name}")
iterdir()
は指定したディレクトリの直下のみを返しますが、再帰的に探索するにはrglob()
を使います。
for path in dir_path.rglob("*"):
print(path)
このように書けば、サブディレクトリを含むすべてのファイルやフォルダを取得できます。とてもシンプルなので、最近のPythonコードではpathlib
が使われることが多いです。
よくあるエラーと注意点
パスの指定ミス
「ファイルやディレクトリが見つからない」というエラーはよくあるミスです。相対パスを使うと実行場所に依存するため、必ずos.getcwd()
で現在の作業ディレクトリを確認しましょう。絶対パスを指定するのも一つの方法です。
日本語やスペースを含むパス
日本語やスペースを含むパスでは意図せずエラーになる場合があります。その場合はr"パス"
のようにRaw文字列を使うか、しっかりとエスケープ処理を行う必要があります。
権限の問題
特定のフォルダにアクセスできない場合は、権限エラー(PermissionError)が発生します。特にLinux環境やサーバー上ではよく起こるため、事前にアクセス権限を確認することが重要です。
応用テクニック:条件付きで一覧を絞り込む
単純に一覧を取得するだけでなく、特定の条件に絞って取得すると効率的です。例えば「CSVファイルだけ一覧にしたい」という場合は、拡張子をチェックすれば簡単に実現できます。
from pathlib import Path
dir_path = Path("./sample")
csv_files = [p for p in dir_path.iterdir() if p.suffix == ".csv"]
print(csv_files)
このようにリスト内包表記を使えば、短いコードで柔軟な条件指定ができます。実務でもよく使われるテクニックです。
Python初心者におすすめのサービス
「もっと実践的なコード例が欲しい」「自分の用途に合わせて教えてほしい」という方には、
テックアカデミーがおすすめです。
AI関連コースやシステム開発コース、アプリ開発コースなど豊富な学習が可能です。
さらに今なら無料相談でアマギフプレゼントもあるので、気軽にお申込みしてみてください。
また、プログラミング学習のプラットフォームとして、ココナラでは、現役エンジニアや経験豊富なPython講師が、あなたのレベルや目的に合わせてマンツーマンで指導してくれます。
書籍や動画ではカバーしきれない、あなた専用のカリキュラムで学べるのが最大の魅力。短時間で効率的にスキルを伸ばしたいなら、まずは出品者のサービスをチェックしてみましょう。
また、教える側としてスキルを活かして副業・独立を目指すことも可能です。
プログラミング経験やPythonの知識があれば、自分の得意分野をサービスとして出品し、全国の学習者から直接依頼を受けられます。オンラインで完結するため、場所や時間に縛られず、自分のペースで働けるのも大きなメリットです。
こちらのリンクから詳細をチェックしてみてください。
まとめ
Pythonでディレクトリ一覧を取得する方法は、os.listdirから始まり、os.scandirやos.walk、さらにpathlibまで幅広く存在します。用途や目的に応じて最適な方法を選び、効率的にファイル操作を行いましょう。
以下のリンクから、
SESの組込みシステムから色々な不満を持ち、自社WEBサービスへ転職した実体験の記事がありますので、是非読んでみてください。とても喜びます。
SESの組込みシステムから自社WEBサービスのエンジニアに転職した話

コメント