Pythonでファイル名・ディレクトリ名の一覧をリストで取得する方法

 

Pythonでディレクトリ内のファイルやフォルダの一覧を取得することは、ファイル操作の基本的な処理です。本記事では、osモジュール、pathlibモジュール、globモジュールを使った様々な方法を解説します。

os.listdir()を使用した基本的な方法

すべてのファイル・ディレクトリの取得

import os

files = os.listdir(".")
print(files)  # ['file1.txt', 'file2.py', 'folder1', 'folder2']

ファイルのみを取得

import os

path = "."
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
print(files)  # ['file1.txt', 'file2.py']

ディレクトリのみを取得

import os

path = "."
dirs = [d for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))]
print(dirs)  # ['folder1', 'folder2']

pathlibを使用したモダンな方法

すべてのファイル・ディレクトリの取得

from pathlib import Path

path = Path(".")
items = [item.name for item in path.iterdir()]
print(items)  # ['file1.txt', 'file2.py', 'folder1', 'folder2']

ファイルのみを取得

from pathlib import Path

path = Path(".")
files = [f.name for f in path.iterdir() if f.is_file()]
print(files)  # ['file1.txt', 'file2.py']

ディレクトリのみを取得

from pathlib import Path

path = Path(".")
dirs = [d.name for d in path.iterdir() if d.is_dir()]
print(dirs)  # ['folder1', 'folder2']

globを使用したパターンマッチング

特定の拡張子のファイルを取得

import glob

txt_files = glob.glob("*.txt")
print(txt_files)  # ['file1.txt', 'data.txt']

py_files = glob.glob("*.py")
print(py_files)  # ['main.py', 'utils.py']

pathlibのglob機能

from pathlib import Path

path = Path(".")
txt_files = list(path.glob("*.txt"))
print([f.name for f in txt_files])  # ['file1.txt', 'data.txt']

高度な使用例

隠しファイルを除外した一覧取得

from pathlib import Path

path = Path(".")
visible_files = [f.name for f in path.iterdir() 
                if f.is_file() and not f.name.startswith('.')]
print(visible_files)

ファイル情報付きの一覧取得

from pathlib import Path
import os

path = Path(".")
file_info = []
for item in path.iterdir():
    if item.is_file():
        size = item.stat().st_size
        file_info.append({
            'name': item.name,
            'size': size,
            'type': 'file'
        })
    else:
        file_info.append({
            'name': item.name,
            'type': 'directory'
        })

for info in file_info:
    print(info)

複数の拡張子をまとめて取得

from pathlib import Path

path = Path(".")
extensions = ['.txt', '.py', '.md']
files = []

for ext in extensions:
    files.extend(path.glob(f"*{ext}"))

print([f.name for f in files])

os.walk()を使用したサブディレクトリ含む取得

再帰的にすべてのファイルを取得

import os

all_files = []
for root, dirs, files in os.walk("."):
    for file in files:
        all_files.append(os.path.join(root, file))

print(all_files[:5])  # 最初の5件を表示

まとめ

ファイル・ディレクトリの一覧取得には複数の方法があります。単純な一覧取得にはos.listdir()、より高機能で読みやすいコードにはpathlib、パターンマッチングにはglobを使用することをおすすめします。用途に応じて適切な方法を選択し、効率的なファイル操作を実現しましょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座