Pythonでディレクトリ内の拡張子「.txt」のファイルをすべて見つける方法
Pythonでは、os.listdirメソッドを使うことで、指定したディレクトリ内のすべてのファイルやフォルダを一覧として取得できます。取得したリストをフィルタリングしてファイルのみを抽出し、さらに拡張子を確認することで、目的の「.txt」ファイルだけを取り出すことができます。
os.listdirとendswithを使う方法
>>> import os
>>> file_list = [f for f in os.listdir('.') if os.path.isfile(os.path.join('.', f)) and f.endswith('.txt')]
>>> print(file_list)
['LICENSE.txt', 'NEWS.txt', 'README.txt']
endswithメソッドは文字列クラスに属するメソッドで、文字列が特定のサフィックス(接尾辞)で終わっているかどうかを判定します。ここでは、ファイル名が「.txt」で終わるものだけをリストに残しています。
なお、os.path.isfileでファイルかどうかを事前にチェックしているのは、同名のディレクトリ(例:「notes.txt」という名前のフォルダ)が混在している場合でも正しく動作させるためです。
globモジュールを使う方法
よりシンプルに書きたい場合は、globモジュールを利用するのもおすすめです。ワイルドカードパターンに一致するパスを直接取得できます。
>>> import glob
>>> file_list = [f for f in glob.glob("*.txt")]
>>> print(file_list)
['LICENSE.txt', 'NEWS.txt', 'README.txt']
glob.glob("*.txt")は、カレントディレクトリ内の「.txt」で終わるすべてのファイルにマッチします。コードが短く直感的なので、単純な条件での検索にはこちらが便利です。
pathlibを使う方法(Python 3.4以降)
近年のPythonでは、オブジェクト指向的なパス操作が可能なpathlibモジュールを使うのが主流になりつつあります。
>>> from pathlib import Path
>>> file_list = [f.name for f in Path('.').glob('*.txt') if f.is_file()]
>>> print(file_list)
['LICENSE.txt', 'NEWS.txt', 'README.txt']
Path.glob()はパターンマッチングを行い、is_file()でファイルであることを確認できます。OSごとのパス表記の違いも自動的に吸収してくれるため、クロスプラットフォーム対応のコードを書きやすいのが特徴です。
まとめ
- os.listdir + endswith:標準的で柔軟性が高い方法。細かい条件分岐を加えたい場合に向いています。
- glob:パターンマッチだけで済むなら最も簡潔に書けます。
- pathlib:モダンで可読性が高く、再帰的な検索(
rglob)にも簡単に対応できます。
用途に応じてこれらの方法を使い分けることで、効率的にファイルを検索・処理できます。
-
Pythonでフォルダ内のすべてのExcelファイルを一括マージする方法
Pythonを使えば、フォルダ内に散らばった複数のExcelファイルをわずか数行のコードで1つのファイルにまとめることができます。本記事では、標準ライブラリのglobモジュールと、データ分析に欠かせないpandasを組み合わせて、Excelファイルを一括結合する手順を詳しく解説します。 前提条件:必要なパッケージのインストール まず、Excelファイルを読み書きするために以下のパッケージが必要です。まだインストールしていない場合は、pipコマンドで導入しておきましょう。 pip install openpyxl xlrd openpyxl:xlsx形式(Excel 2007以降)の読み書きに
-
Linuxのfindコマンドでディレクトリ内の空ファイル(0バイト)を検索する方法
本記事では、Linuxのfindコマンドの使い方を解説した以前のガイドの続編として、「空」(ゼロバイト)のファイルを検索する方法をご紹介します。先日、Linuxサーバーのメンテナンスを行っていたところ、時間の経過とともにユーザーが作成して放置されたままの空のファイルが多数見つかりました。そこで、システム全体を走査してこうしたファイルの件数とパスを一覧表示するシェルスクリプトを作成することにしました。まずは、同様の検索を実行できるシンプルなコマンドから見ていきましょう。空ファイルを検索する基本のコマンド# find -L /home/stewiegriffin -maxdepth 1 -type