目次
Pythonで作業する際、特定のディレクトリ下にある複数のファイルパスを一度に取得できると便利です。
Pythonのos
モジュールを使用のwalk
を利用するとできることがわかったので、備忘録を残します。
フォルダ配下のファイルパスを取得する方法
Pythonのos.walk
関数を使用することで、指定したディレクトリを再帰的に探索し、そのディレクトリ内のすべてのファイルパスを取得することができます。以下は、その具体的な方法を示したコード例です。
import os
def get_file_paths(directory):
file_paths = []
# os.walkを使って指定したディレクトリを再帰的に探索
for root, _, files in os.walk(directory):
for file in files:
# os.path.joinでファイルパスを取得
file_path = os.path.join(root, file)
file_paths.append(file_path)
return file_paths
# 使用例
directory = "/path/to/your/folder" # フォルダのパスを指定
file_paths = get_file_paths(directory)
# 結果を表示
for path in file_paths:
print(path)
コード解説
os.walk
:os.walk
は指定したディレクトリを再帰的に探索し、ディレクトリ内のファイルとサブディレクトリを探します。この関数はタプル(root, dirs, files)
を返します。- ループの中身: ループを使用して、
root
(カレントディレクトリのパス)とfiles
(そのディレクトリ内のファイル名のリスト)を組み合わせ、os.path.join
を使用して完全なファイルパスを作成します。 - ファイルパスの収集: 完全なファイルパスはリスト
file_paths
に追加されます。
特定の種類(拡張子)のファイルを取得する方法
すべてのファイルではなく、特定の種類のファイル(例えばPythonファイルなど)だけを取得したい場合は、以下のようなコードを使用します。
def get_file_paths(directory, extensions=None):
file_paths = []
if extensions is not None:
extensions = tuple(extensions) # tupleに変換して後のstartswithに対応
for root, _, files in os.walk(directory):
for file in files:
if extensions is None or file.endswith(extensions):
file_path = os.path.join(root, file)
file_paths.append(file_path)
return file_paths
# 使用例
directory = "/path/to/your/folder"
extensions = ['.txt', '.py'] # 拡張子をリストで指定
file_paths = get_file_paths(directory, extensions)
# 結果を表示
for path in file_paths:
print(path)
コード解説
if extensions is not None
:extensions
が指定されている場合、これをタプルに変換します。これにより、file.endswith(extensions)
の条件チェックがタプルに対応します。- 指定された拡張子でファイルをフィルタリング:
extensions
がNone
の場合はすべてのファイルを取得し、そうでない場合は指定された拡張子を持つファイルのみを取得します。