フォルダ内のファイル一覧を取得する方法
pathlib、glob、os.scandir、os.listdir を使用したサンプルプルグラムです。どのサンプルも同じ結果を返します。pathlib
pathlib はオブジェクト指向のファイルパスを扱うクラスです。Python バージョン 3.4 以降が必要ですが、慣れると最も便利です。- Pathクラス の globメソッド に検索条件を指定します。
- 検索条件は Unix で使われている globパターン(例: *.txt) が使用できます。
- 条件結果は Pathクラスのジェネレーター で返されます。
from pathlib import Path
# Path オブジェクトを生成
targetPath = Path('./temp')
# ファイルを列挙(結果は Pathクラスのgenerator で返る)
for item in targetPath.glob('./*'):
print(f'-----------------------------------------')
print(f'ファイル名 = {item.name}')
print(f'絶対パス = {item.absolute()}')
print(f'フォルダか? = {item.is_dir()}')
print(f'ファイルか? = {item.is_file()}')
glob
globモジュール を使用すると、globパターン(例: *.txt) でファイルを検索できます。- globモジュール の glob関数 に ファイルの検索条件 を指定します。
- 検索条件は globパターン が使用できます。
- 結果は パス(dirname/filename.txt の形式、型は文字列) が リストで返されます。
import glob
import os
# ファイルを列挙(結果はパスがリストで返る)
pathList = glob.glob('./temp/*')
for path in pathList:
print(f'-----------------------------------------')
print(f'ファイル名 = {os.path.basename(path)}')
print(f'絶対パス = {os.path.abspath(path)}')
print(f'フォルダか? = {os.path.isdir(path)}')
print(f'ファイルか? = {os.path.isfile(path)}')
os.scandir 関数
os.scandir 関数に フォルダのパス を渡すと、検索結果が DirEntryオブジェクト で返ります。- 結果は DirEntryオブジェクトのイテレーター で返されます。
- DirEntryオブジェクト は is_dir() メソッド や is_file() メソッドが使用できます。
- os.scandir() + DirEntry を使用すると、os.listdir() + os.path.isdir() や glob.glob() + os.path.isdir() より、大幅に高速になります。
import os
# ファイルを列挙
with os.scandir(path='./temp') as it:
for entry in it:
print(f'-----------------------------------------')
print(f'ファイル名 = {entry.name}')
print(f'絶対パス = {os.path.abspath(entry.path)}')
print(f'フォルダか? = {entry.is_dir()}')
print(f'ファイルか? = {entry.is_file()}')
os.listdir 関数
os.listdir 関数に フォルダのパス を渡すと、フォルダ内のファイル名がリストで返ります。- 結果は ファイル名(filename.txt の形式、型は文字列) が リストで返されます。
import os
# 対象フォルダのパス
target = './temp'
# ファイルを列挙(ファイル名がリストで返される)
filenameList = os.listdir(path=target)
for filename in filenameList:
# 返されるのはファイル名なので、パスを組み立てる
abspath = os.path.abspath(os.path.join(target, filename))
print(f'-----------------------------------------')
print(f'ファイル名 = {filename}')
print(f'絶対パス = {abspath}')
print(f'フォルダか? = {os.path.isdir(abspath)}')
print(f'ファイルか? = {os.path.isfile(abspath)}')
サブフォルダ内も再帰的に取得したい場合
次の記事を参照してください。検証環境
- Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
- Python 3.9.7 (default, Sep 3 2021, 20:10:26) [GCC 10.2.1 20210110] on linux
- Docker image: python
- Docker Desktop 4.0.1(68347)
- Docker Engine 20.10.8
- Docker Compose v2.0.0-rc.3
- Microsoft Windows 10 Pro Version 21H1 OS Build 19043.1237 Experience: Windows Feature Experience Pack 120.2212.3530.0