Pythonでファイル名を取得する方法

Python

Pythonのコード内からファイル名を取得する方法を解説します。

パスからファイル名のみを抜き出す

パスからファイル名を取得するにはos.path.basename関数を使います。

書式

import os

os.path.basename(パス)

サンプル

import os

print(os.path.basename(__file__))

実行結果

main.py

__file__は自らのファイルのパスを取得します。

ディレクトリに格納されているファイル名を取得する

osモジュールのwalk関数を使うことで、引数に指定したディレクトリに格納されている全てのファイル名とディレクトリ名を取得することができます。

指定したディレクトリ内にさらにディレクトリが格納されている場合、その格納されているディレクトリの中身も取得されます。

使い方

import os

os.walk(パス)

サンプル

例えば以下のようなファイル構造をしているとして、


※ libディレクトリとmain.pyは同じディレクトリ内に格納されています。

この時、main.pyからlibディレクトリの中身を表示してみます。

main.py

import os

for d, s, f in os.walk('lib'):
    print(f'd: {d}')
    print(f's: {s}')
    print(f'f: {f}\n')

実行結果

d: lib
s: ['text']
f: ['file2.py', 'file1.py']

d: lib/text
s: []
f: ['text.txt']

dはディレクトリ名、sはサブディレクトリ名、fはファイル名を取得しています。

このように指定したディレクトリに格納されているファイル名とサブディレクトリ名を取得でき、さらには、サブディレクトリ内のファイル名も再帰的に取得できます。

正規表現でファイル名を取得する

正規表現でマッチしたファイル名を取得できます。

例えば以下のようなファイル構造をしていたとして、

この時、main.pyからdirディレクトリ内に格納されている全てのファイル名を取得してみます。

main.py

import glob
import os

# ディレクトリのパス
dir_path = 'dir'

# dir/*
path = os.path.join(dir_path, '*')

print(glob.glob(path))

実行結果

['dir/file.py', 'dir/text1.txt', 'dir/text2.txt']

「dir/」が付いていますが、ディレクトリ内の全てのファイル名を取得できました。

特定のファイルのみを取得する

例として先ほどのdirディレクトリからテキストファイルのみを取得してみます。

import glob
import os

dir_path = 'dir'

# dir/*.txt
path = os.path.join(dir_path, '*.txt')

print(glob.glob(path))

実行結果

['dir/text1.txt', 'dir/text2.txt']

「*」に「.txt」を付けました。これにより、拡張子が「.txt」のファイルのみマッチします。

タイトルとURLをコピーしました