[解決!Python]パスからディレクトリ名とファイル名を取得するには:解決!Python
os.pathモジュールのdirname/basename/split関数と、pathlibモジュールのPath.parent/Path.name属性を使ってパスからディレクトリ名やファイル名を取得する方法を紹介する。
from os.path import dirname, basename
path = 'foo/bar/baz.txt'
dname = dirname(path)
fname = basename(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file: baz.txt
from os.path import split
dname, fname = split(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file: baz.txt
path = 'foo/bar/'
dname = dirname(path)
fname = basename(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file:
dname, fname = split(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file:
from pathlib import Path
path = Path('foo/bar/baz.txt')
print(f'dir: {path.parent}, file: {path.name}') # dir: foo/bar, file: baz.txt
path = Path('foo/bar/')
print(f'dir: {path.parent}, file: {path.name}') # dir: foo, file: bar
os.pathモジュールのdirname/basename/split関数
os.pathモジュールにはdirname関数とbasename関数がある。これらを使うと、パスのディレクトリ名とファイル名を取得できる。
これらの関数は共にパスを表す文字列(やPathオブジェクト)を引数に取り、dirname関数はそのディレクトリ名を返送し、basename関数はファイル名(に相当する部分)を返送する。
以下に例を示す。
from os.path import dirname, basename
path = 'foo/bar/baz.txt'
dname = dirname(path)
fname = basename(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file: baz.txt
この例では「foo/bar/baz.txt」というパスに対してdirname関数とbasename関数を適用している。dirname関数により変数dnameにはディレクトリ名である「foo/bar」が、basename関数により変数fnameにはファイル名である「baz.txt」が代入されている。
ディレクトリ名かファイル名のいずれかが必要であれば、これらを使えばよい。両方が必要であれば、同じos.pathモジュールのsplit関数を使用する。この関数は与えられたパスをディレクトリ名とファイル名に分割したものをタプルとして返送する。
以下に例を示す。
from os.path import split
dname, fname = split(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file: baz.txt
結果は上と同様だ。
注意する点としてはパスが区切り文字で終了する場合だ。この場合、パスはディレクトリ名しか含まれないと判断され、ファイル名は空となる。以下に例を示す。
path = 'foo/bar/'
dname = dirname(path)
fname = basename(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file:
dname, fname = split(path)
print(f'dir: {dname}, file: {fname}') # dir: foo/bar, file:
Copyright© Digital Advantage Corp. All Rights Reserved.