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のプロパティを使うことで、ファイル名、拡張子、親ディレクトリの操作が直感的に行えます。namestemsuffixparentといった基本的なプロパティを組み合わせることで、柔軟なファイルパス操作が可能になります。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座