Python入門
第20回.フォルダとファイルの一覧を取得(os,glob,pathlib)

Pythonの初心者向け入門解説、人気のプログラミング言語Python
最終更新日:2020-09-26

第20回.フォルダとファイルの一覧を取得(os,glob,pathlib)


Python フォルダ ファイル 一覧 os glob pathlib

Pyhtonでフォルダやファイルを操作する手段は複数提供されています。
標準ライブラのos,glob,pathlibについてサンプルコードとともに解説していきます。


バージョン3.4で追加されたpathlibがとても便利なので、これが使えれば良いと思います。
osとglobについて簡単に使用例を見てから、pathlibについて詳しく見ていきます。


目次

出力結果のサンプルデータについて

以降のスクリプトの実行結果は、以下のディレクトリ構成で実行した場合の結果になります。
Python フォルダ ファイル 一覧 os glob pathlib


出力結果を見やすいように縦に出力する関数を作成しています。
def vprint(s):
    [print(p) for p in s]
以降のコードでは、共通としてこの関数を使用しています。


os.path,os.listdirの使用例

標準ライブラリのosを使います。
osモジュールはオペレーティングシステムインターフェイスです。
import os
#以下は相対パス、絶対パスでも良い path = "./test"
print("\nパスの存在確認") print(os.path.exists(path)) print(os.path.exists(path + "/file01.txt"))
print("\nディレクトリ&ファイル") files = os.listdir(path) vprint(files)
print("\nディレクトリのみ") dir = [f for f in files if os.path.isdir(os.path.join(path, f))] vprint(dir)
print("\nファイルのみ") file = [f for f in files if os.path.isfile(os.path.join(path, f))] vprint(file)
os.path.exists(path)
pathが実在するパスならTrueを返します。
os.listdir(path)
pathが存在する ディレクトリなら True を返します。
os.path.isfile(path)
pathが存在する 一般ファイルなら True を返します。
os.path.join(path, *paths)
1つあるいはそれ以上のパスの要素を結合します。戻り値は pathです。

Python フォルダ ファイル 一覧 os glob pathlib


glob.globの使用例

globモジュールはUnixシェルで使われているルールに従い指定されたパターンに一致するすべてのパス名を見つけ出します。
返される結果の順序は不定です。

パターンマッチング

使用できるワイルドカードです。

* 長さ0文字以上の任意の文字列
? 任意の一文字
[] 特定の一文字
** あらゆるファイルや0個以上のディレクトリ、サブディレクトリおよびディレクトリへのシンボリックリンクにマッチします。

import glob
#以下は相対パス、絶対パスでも良い path = "./test"
#ディレクトリ&ファイルの存在確認 print("\nディレクトリ&ファイル") files = glob.glob(path + "/*") vprint(files)
print("\n特定の拡張子") files = glob.glob(path + "/*.txt") vprint(files)
print("\n全サブディレクトリの全ファイル") files = glob.glob(path + "/**/*", recursive=True) vprint(files)
glob.glob(pathname, *, recursive=False)
pathnameのリストを返します。
pathnameはパス名を含む文字列でなければなりません。
pathnameは絶対パスまたは相対パスで、シェルスタイルのワイルドカードを含めることができます。
壊れたシンボリックリンクが結果に含まれます(シェルと同様)。
結果がソートされるかどうかは、ファイルシステムによって異なります。
この関数の呼び出し中に条件を満たすファイルが削除または追加された場合、そのファイルのパス名を含めるかどうかは指定されていません。

recursive=Trueの場合
パターン"**"はあらゆるファイルや0個以上のディレクトリ、サブディレクトリおよびディレクトリへのシンボリックリンクにマッチします。

Python フォルダ ファイル 一覧 os glob pathlib


pathlibのプロパティ・メソッド一覧

ファイルシステムのパスを表すクラスを提供しています。
純粋パス(PurePath)と以下の具象パスからなります。

具象パス

Path
このインスタンスの作成でPosixPathかWindowsPathのどちらかが作成されます。
PosixPath
非 Windowsファイルシステムの具象パスを表します。
WindowsPath
Windowsファイルシステムの具象パスを表します。

したがって、Pathを使えば問題ありません。

演算子

演算子スラッシュ "/" パスの追加を行います。

PurePathのプロパティ・メソッド

リンクは公式にリンクしています

プロパティ
メソッド
説明
driveドライブ文字または名前を表す文字列があればそれになります。
rootローカルまたはグローバルルートを表す文字列があればそれになります。
anchorドライブとルートを結合した文字列になります。
parentsパスの論理的な上位パスにアクセスできるイミュータブルなシーケンスになります。
parentパスの論理的な上位パスになります。
nameパス要素の末尾を表す文字列があればそれになります。ドライブやルートは含まれません。
suffix末尾の要素に拡張子があればそれになります。
suffixesパスのファイル拡張子のリストになります。
stemパス要素の末尾から拡張子を除いたものになります。
as_posixフォワードスラッシュ(/)を使用したパスを表す文字列を返します。
as_urifileURIで表したパスを返します。
is_absoluteパスが絶対パスかどうかを返します。
is_reservedPureWindowsPathの場合はパスがWindows上で予約されていればTrueを返し、そうでなければFalseを返します。
PurePosixPathの場合は常にFalseを返します。
joinpathこのメソッドの呼び出しは引数otherを順々に繋げることと等価になります。
match現在のパスがglob形式で与えられたパターンと一致したらTrueを、一致しなければFalseを返します。
relative_tootherで表されたパスから現在のパスへの相対パスを返します。
with_name現在のパスのname部分を変更したパスを返します。
オリジナルパスにname部分がない場合はValueErrorが送出されます。
with_suffixsuffixを変更した新しいパスを返します。
元のパスにsuffixが無かった場合、代わりに新しいsuffixが追加されます。
suffixが空文字列だった場合、元のsuffixは除去されます。

Pathのプロパティ・メソッド

リンクは公式にリンクしています

プロパティ
メソッド
説明
cwd (os.getcwd()が返す)現在のディレクトリを表す新しいパスオブジェクトを返します。
home ユーザーのホームディレクトリ(os.path.expanduser()での~の返り値)を表す新しいパスオブジェクトを返します。
stat os.stat()のような、このパスに関する情報を含むos.stat_resultオブジェクトを返します。
結果は、このメソッドの呼び出しごとに調べられます。
chmod os.chmod()のようにファイルのモードとアクセス権限を変更します。
exists パスが既存のファイルかディレクトリを指しているかどうかを返します。
expanduser パス要素~および~userをos.path.expanduser()が返すように展開した新しいパスオブジェクトを返します。
glob このパスで表されるディレクトリ内の特定の相対パターンを取得し、一致するすべてのファイルを生成します。
group ファイルを所有するグループ名を返します。ファイルのGIDがシステムのデータベースに見つからなかった場合はKeyErrorが送出されます。
is_dir パスがディレクトリ(またはディレクトリへのシンボリックリンク)を指していた場合Trueを返し、その他の種類のファイルだった場合Falseを返します。
is_file パスが一般ファイル(または一般ファイルへのシンボリックリンク)を指していた場合Trueを返します。その他の種類のファイルを指していた場合Falseを返します。
is_mount パス名pathがマウントポイントmountpoint(ファイルシステムの中で異なるファイルシステムがマウントされているところ)ならTrueを返します。
is_symlink パスがシンボリックリンクを指していた場合Trueを返し、その他の場合はFalseを返します。
is_socket パスがUnixソケット(またはUnixソケットへのシンボリックリンク)を指していた場合Trueを返します。
その他の種類のファイルの場合Falseを返します。
is_fifo パスがFIFO(またはFIFOへのシンボリックリンク)を指していた場合Trueを返します。
その他の種類のファイルの場合はFalseを返します。
is_block_device パスがブロックデバイス(またはブロックデバイスへのシンボリックリンク)を指していた場合Trueを返します。
その他の種類のファイルの場合はFalseを返します。
is_char_device パスがキャラクターデバイス(またはキャラクターデバイスへのシンボリックリンク)を指していた場合、Trueを返します。
その他の種類のファイルの場合Falseを返します。
iterdir パスがディレクトリを指していた場合、ディレクトリの内容のパスオブジェクトのイテレータを作成します。
任意の順序で生成されす。
特別なエントリ「.」および「..」は含まれていません。
lchmod Path.chmod()のように振る舞いますが、パスがシンボリックリンクを指していた場合、リンク先ではなくシンボリックリンク自身のモードが変更されます。
lstat Path.stat()のように振る舞いますが、パスがシンボリックリンクを指していた場合、リンク先ではなくシンボリックリンク自身の情報を返します。
mkdir 与えられたパスに新しくディレクトリを作成します。
modeが与えられていた場合、プロセスのumask値と組み合わせてファイルのモードとアクセスフラグを決定します。
パスがすでに存在していた場合FileExistsErrorが送出されます。
open 組み込み関数open()のようにパスが指しているファイルを開きます。
owner ファイルの所有者のユーザー名を返します。
ファイルのUIDがシステムのデータベースに見つからない場合KeyErrorが送出されます。
read_bytes 指定されたファイルの内容をバイナリオブジェクトで返します。
read_text 指定されたファイルの内容を文字列としてデコードして返します。
rename このファイルまたはディレクトリの名前を指定されたターゲットに変更し、ターゲットを指す新しいPathインスタンスを返します。
replace このファイルまたはディレクトリの名前を指定されたターゲットに変更し、ターゲットを指す新しいPathインスタンスを返します。
ターゲットが既存のファイルまたはディレクトリを指している場合、無条件に置き換えられます。
resolve パスを絶対パスにし、あらゆるシンボリックリンクを解決します。新しいパスオブジェクトが返されます。
rglob ThisislikecallingPath.glob()with"**/"addedinfrontofthegivenrelativepattern。
rmdir 現在のディレクトリを削除します。
ディレクトリは空でなければなりません。
samefile このパスが参照するファイルがother_path(Pathオブジェクトか文字列)と同じであればTrueを、異なるファイルであればFalseを返します。
意味的にはos.path.samefile()およびos.path.samestat()と同じです。
symlink_to 現在のパスにtargetへのシンボリックリンクを作成します。
Windowsでは、リンク対象がディレクトリの場合target_is_directoryが真でなければなりません(デフォルトはFalse)。
POSIXでは、target_is_directoryの値は無視されます。
touch 与えられたパスにファイルを作成します。
modeが与えられた場合、プロセスのumask値と組み合わせてファイルのモードとアクセスフラグが決定されます。
ファイルがすでに存在した場合、exist_okが真ならばこの関数は正常に終了します(そしてファイルの更新日付が現在の日時に変更されます)。
その他の場合はFileExistsErrorが送出されます。
unlink このファイルまたはシンボリックリンクを削除します。
パスがディレクトリを指している場合はPath.rmdir()を使用してください。
link_to targetという名前のパスを指すハードリンクを作成します。
write_bytes 指定されたファイルをバイトモードで開き、dataを書き込み、ファイルを閉じます。
write_text 指定されたファイルをテキストモードで開き、dataを書き込み、ファイルを閉じます。

パターンマッチング

使用できるワイルドカードです。

* 長さ0文字以上の任意の文字列
? 任意の一文字
[] 特定の一文字
** あらゆるファイルや0個以上のディレクトリ、サブディレクトリおよびディレクトリへのシンボリックリンクにマッチします。

pathlib.Pathの使用例

from pathlib import Path
#以下は相対パス、絶対パスでも良い p = Path("./test")
print("\nパスの存在確認") print(p.exists()) print((p / "file01.txt").exists())
print("\nディレクトリ&ファイル") vprint(p.iterdir())
print("\n#ディレクトリ") dirs = [x for x in p.iterdir() if x.is_dir()] vprint(dirs)
print("\n#ファイル") files = [x for x in p.iterdir() if x.is_file()] vprint(files)
print("\n#サブディレクトリも含めた全txtファイル") files = p.glob('**/*.txt') vprint(files)
Path.exists()
パスが既存のファイルかディレクトリを指しているかどうかを返します。
Path.iterdir()
パスがディレクトリを指していた場合、ディレクトリの内容のパスオブジェクトのイテレータを作成します。
任意の順序で生成されす。
特別なエントリ「.」および「..」は含まれていません。
Path.is_dir()
パスがディレクトリ(またはディレクトリへのシンボリックリンク)を指していた場合Trueを返し、その他の種類のファイルだった場合Falseを返します。
Path.is_file()
パスが一般ファイル(または一般ファイルへのシンボリックリンク)を指していた場合Trueを返します。その他の種類のファイルを指していた場合Falseを返します。
Path.glob(pattern)
このパスで表されるディレクトリ内の特定の相対パターンを取得し、一致するすべてのファイルを生成します。

パターン "**" は "このディレクトリおよびすべてのサブディレクトリを再帰的に走査" を意味します。
言い換えれば、再帰的な Glob 走査が可能という意味です

Python フォルダ ファイル 一覧 os glob pathlib




同じテーマ「Python入門」の記事

第16回.Pythonの引数は参照渡しだが・・・
第17回.リスト内包表記
第18回.例外処理(try文)とexception一覧
第19回.import文(パッケージ・モジュールのインポート)
第20回.フォルダとファイルの一覧を取得(os,glob,pathlib)
第21回.CSV読み込みとopen()関数とwith文
第22回.CSV読み書き(csvモジュール)
第23回.pipコマンド(外部ライブラリのインストール)
第24回.エクセルを操作する(openpyxl)
第25回.エクセルを操作する(pywin32:win32com)
第26回.WEBスクレイピング(selenium)


新着記事NEW ・・・新着記事一覧を見る

WEBスクレイピング(selenium)|Python入門(10月11日)
エクセルを操作する(pywin32:win32com)|Python入門(10月5日)
エクセルを操作する(openpyxl)|Python入門(10月3日)
pipコマンド(外部ライブラリのインストール)|Python入門(10月1日)
CSV読み書き(csvモジュール)|Python入門(9月29日)
「Excel 4.0 マクロ」の使い方|VBA技術解説(9月28日)
CSV読み込みとopen()関数とwith文|Python入門(9月28日)
フォルダとファイルの一覧を取得(os,glob,pathlib)|Python入門(9月26日)
import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.マクロって何?VBAって何?|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ