Python pathlibでファイル名・拡張子・親ディレクトリを簡単に取得する方法
ファイル名の取得
name – ファイル名全体の取得
from pathlib import Path
path = Path('/home/user/documents/sample.txt')
print(path.name) # sample.txt
# ディレクトリの場合
dir_path = Path('/home/user/documents')
print(dir_path.name) # documents
stem – 拡張子を除いたファイル名の取得
from pathlib import Path
path = Path('/home/user/documents/sample.txt')
print(path.stem) # sample
# 複数の拡張子がある場合
archive_path = Path('backup.tar.gz')
print(archive_path.stem) # backup.tar
拡張子の取得
suffix – 最後の拡張子を取得
from pathlib import Path
path = Path('sample.txt')
print(path.suffix) # .txt
# 拡張子がない場合
no_ext_path = Path('README')
print(no_ext_path.suffix) # ''
# 複数の拡張子がある場合
archive_path = Path('backup.tar.gz')
print(archive_path.suffix) # .gz
suffixes – 全ての拡張子をリストで取得
from pathlib import Path
# 複数拡張子のファイル
path = Path('backup.tar.gz')
print(path.suffixes) # ['.tar', '.gz']
# 単一拡張子のファイル
simple_path = Path('document.pdf')
print(simple_path.suffixes) # ['.pdf']
親ディレクトリの取得
parent – 直接の親ディレクトリ
from pathlib import Path
path = Path('/home/user/documents/sample.txt')
print(path.parent) # /home/user/documents
# さらに親のディレクトリ
print(path.parent.parent) # /home/user
parents – 全ての親ディレクトリ
from pathlib import Path
path = Path('/home/user/documents/data/sample.txt')
# 全ての親ディレクトリを取得
for parent in path.parents:
print(parent)
# /home/user/documents/data
# /home/user/documents
# /home/user
# /home
# /
実用的な使用例
ファイル名変更関数
from pathlib import Path
def change_extension(file_path, new_extension):
"""ファイルの拡張子を変更"""
path = Path(file_path)
new_path = path.parent / (path.stem + new_extension)
return new_path
# 使用例
original = Path('document.txt')
new_path = change_extension(original, '.pdf')
print(new_path) # document.pdf
バックアップファイル名生成
from pathlib import Path
from datetime import datetime
def create_backup_name(file_path):
"""バックアップファイル名を生成"""
path = Path(file_path)
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
backup_name = f"{path.stem}_{timestamp}{path.suffix}"
return path.parent / backup_name
# 使用例
original = Path('important_data.xlsx')
backup = create_backup_name(original)
print(backup) # important_data_20231201_143022.xlsx
ファイル情報の表示
from pathlib import Path
def show_file_info(file_path):
"""ファイルの詳細情報を表示"""
path = Path(file_path)
print(f"完全パス: {path}")
print(f"ファイル名: {path.name}")
print(f"拡張子なしファイル名: {path.stem}")
print(f"拡張子: {path.suffix}")
print(f"全ての拡張子: {path.suffixes}")
print(f"親ディレクトリ: {path.parent}")
# 使用例
show_file_info('/home/user/backup.tar.gz')
ファイルパスの構築
with_name() – ファイル名を変更
from pathlib import Path
path = Path('/home/user/old_file.txt')
new_path = path.with_name('new_file.txt')
print(new_path) # /home/user/new_file.txt
with_suffix() – 拡張子を変更
from pathlib import Path
path = Path('/home/user/document.txt')
new_path = path.with_suffix('.pdf')
print(new_path) # /home/user/document.pdf
# 拡張子を削除
no_ext = path.with_suffix('')
print(no_ext) # /home/user/document
with_stem() – ファイル名(拡張子以外)を変更
from pathlib import Path
path = Path('/home/user/old_name.txt')
new_path = path.with_stem('new_name')
print(new_path) # /home/user/new_name.txt
高度な使用例
複数拡張子の処理
from pathlib import Path
def remove_all_extensions(file_path):
"""全ての拡張子を除去"""
path = Path(file_path)
# suffixesから全ての拡張子を取得し、除去
base_name = path.name
for suffix in path.suffixes:
base_name = base_name.replace(suffix, '')
return path.parent / base_name
# 使用例
compressed = Path('archive.tar.gz')
base_name = remove_all_extensions(compressed)
print(base_name) # archive
まとめ
pathlibのプロパティを使うことで、ファイル名、拡張子、親ディレクトリの操作が直感的に行えます。name、stem、suffix、parentといった基本的なプロパティを組み合わせることで、柔軟なファイルパス操作が可能になります。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

