[Python]os.listdirとjoinで絶対パス指定でファイルのみ取得

Pythonでファイル操作を行う際には、osモジュールが欠かせません。本記事では、os.listdirとos.path.joinを使って、特定のディレクトリ下のファイルのみを取得する方法をご紹介します。

osモジュールについて

osモジュールは、Pythonでファイル操作を行うための標準ライブラリです。ファイルの作成や削除、ディレクトリの作成や移動など、ファイル操作に必要な機能が豊富に揃っています。

os.listdirの基本的な使い方

os.listdirは、指定されたディレクトリ内のファイルやディレクトリのリストを返す関数です。以下は、カレントディレクトリ内のファイルやディレクトリをリストアップする例です。

import os
files = os.listdir('.')
print(files)

上記のコードを実行すると、カレントディレクトリ内のファイルやディレクトリのリストが表示されます。

しかし、このままだとディレクトリも含まれてしまうため、ファイルのみを取得するには、次のようにファイルかどうかを判定する必要があります。

import os
files = os.listdir('.')
for file in files:
    if os.path.isfile(file):
        print(file)

上記のコードを実行すると、カレントディレクトリ内のファイルのみが表示されます。

os.path.joinの基本的な使い方

os.path.joinは、複数のパスを結合して1つのパスにする関数です。以下は、ディレクトリ名とファイル名を結合する例です。

import os
dir_name = 'path/to/dir'
file_name = 'file.txt'
path = os.path.join(dir_name, file_name)
print(path)

上記のコードを実行すると、path/to/dir/file.txtという文字列が表示されます。

os.listdirで絶対パスを取得する方法

os.listdirは、相対パスを指定すると、そのディレクトリ内のファイルやディレクトリのリストを返します。しかし、絶対パスを指定することもできます。以下は、カレントディレクトリの絶対パスを取得し、そのディレクトリ内のファイルのみをリストアップする例です。

import os
abs_path = os.path.abspath('.')
files = os.listdir(abs_path)
for file in files:
    if os.path.isfile(os.path.join(abs_path, file)):
        print(os.path.join(abs_path, file))

上記のコードを実行すると、カレントディレクトリ内のファイルの絶対パスのみが表示されます。

os.path.joinでリストに格納されたパスを結合する方法

os.path.joinは、文字列だけでなく、リストに格納されたパスも結合することができます。以下は、リストに格納されたディレクトリ名とファイル名を結合する例です。

import os
dir_names = ['path', 'to', 'dir']
file_name = 'file.txt'
path = os.path.join(*dir_names, file_name)
print(path)

上記のコードを実行すると、path/to/dir/file.txtという文字列が表示されます。

os.listdirとos.path.joinを組み合わせて、特定のディレクトリ下のファイルのみを取得する方法

以上の知識を組み合わせることで、特定のディレクトリ下のファイルのみを取得することができます。以下は、カレントディレクトリ直下のtestディレクトリ内のファイルの絶対パスのリストを取得する例です。

import os
abs_path = os.path.abspath('.')
dir_name = 'test'
path = os.path.join(abs_path, dir_name)
files = os.listdir(path)
file_paths = [os.path.join(path, file) for file in files if os.path.isfile(os.path.join(path, file))]
print(file_paths)

上記のコードを実行すると、カレントディレクトリ直下のtestディレクトリ内のファイルの絶対パスのリストが表示されます。

まとめ

Pythonでファイル操作を行う際には、osモジュールが欠かせません。os.listdirとos.path.joinを組み合わせることで、特定のディレクトリ下のファイルのみを取得することができます。また、絶対パスを使うことで、任意のディレクトリ内のファイルを取得することもできます。