[Python] ファイルパスから拡張子なしのファイル名を取得する方法

Pythonでファイルパスから拡張子なしのファイル名を取得するには、標準ライブラリのos.pathまたはpathlibを使用します。

os.pathではos.path.splitext()で拡張子を分離し、os.path.basename()でファイル名を取得します。

pathlibではPath.stemを使うと簡単に拡張子なしのファイル名を取得できます。

どちらもファイルパス操作に便利な方法です。

この記事でわかること
  • os.pathを使ったファイル名の取得方法
  • pathlibを利用したファイル名操作
  • ファイル名の変更や一括リネーム
  • タイムスタンプの追加方法
  • 正規表現によるファイル名操作

目次から探す

os.pathを使ったファイル名の取得方法

Pythonの標準ライブラリであるosモジュールには、ファイルパスを操作するための便利な関数が含まれています。

特に、os.pathモジュールを使用することで、ファイル名の取得や拡張子の分離が簡単に行えます。

os.path.basename()でファイル名を取得する

os.path.basename()関数は、指定したファイルパスからファイル名を取得するための関数です。

この関数を使用することで、パスの最後の部分、つまりファイル名だけを簡単に取り出すことができます。

import os
file_path = '/path/to/your/file.txt'
file_name = os.path.basename(file_path)
print(file_name)  # ファイル名を表示
file.txt

os.path.splitext()で拡張子を分離する

os.path.splitext()関数は、ファイル名と拡張子を分離するための関数です。

この関数を使用することで、ファイル名と拡張子をタプルとして取得できます。

import os
file_name = 'file.txt'
name, extension = os.path.splitext(file_name)
print(name)      # 拡張子なしのファイル名を表示
print(extension) # 拡張子を表示
file
.txt

os.pathを使った具体例

以下は、os.pathを使用してファイルパスから拡張子なしのファイル名を取得する具体的な例です。

import os
file_path = '/path/to/your/document.pdf'
file_name = os.path.basename(file_path)  # ファイル名を取得
name, extension = os.path.splitext(file_name)  # 拡張子を分離
print("拡張子なしのファイル名:", name)
拡張子なしのファイル名: document

os.pathのメリットとデメリット

スクロールできます
メリットデメリット
標準ライブラリで追加のインストールが不要機能が少なく、柔軟性に欠けることがある
シンプルで使いやすいパスの操作に関しては他のライブラリに劣ることがある

pathlibを使ったファイル名の取得方法

pathlibは、Python 3.4以降で利用可能なファイルシステムパスをオブジェクト指向で扱うためのモジュールです。

pathlibを使用することで、ファイルパスの操作がより直感的に行えるようになります。

pathlib.Path()の基本

pathlib.Path()は、ファイルシステムのパスを表すオブジェクトを作成するためのクラスです。

このクラスを使用することで、パスの操作が簡単に行えます。

from pathlib import Path
# Pathオブジェクトを作成
file_path = Path('/path/to/your/file.txt')
print(file_path)  # Pathオブジェクトを表示
/path/to/your/file.txt

Path.stemで拡張子なしのファイル名を取得する

Pathオブジェクトには、stemプロパティがあり、これを使用することで拡張子なしのファイル名を簡単に取得できます。

from pathlib import Path
file_path = Path('/path/to/your/file.txt')
file_name_without_extension = file_path.stem
print(file_name_without_extension)  # 拡張子なしのファイル名を表示
file

pathlibを使った具体例

以下は、pathlibを使用してファイルパスから拡張子なしのファイル名を取得する具体的な例です。

from pathlib import Path
file_path = Path('/path/to/your/document.pdf')
file_name_without_extension = file_path.stem  # 拡張子なしのファイル名を取得
print("拡張子なしのファイル名:", file_name_without_extension)
拡張子なしのファイル名: document

pathlibのメリットとデメリット

スクロールできます
メリットデメリット
オブジェクト指向で直感的に使えるPython 3.4以降でしか使用できない
様々なファイル操作が簡単に行える学習コストが少し高いことがある

応用例:ファイル名の操作

ファイル名の操作は、プログラムでファイルを管理する上で非常に重要です。

ここでは、Pythonを使ったファイル名の変更や操作の具体例を紹介します。

ファイル名を変更する方法

os.rename()関数を使用することで、ファイル名を簡単に変更できます。

以下は、ファイル名を変更する例です。

import os
# 変更前のファイル名
old_file_name = 'old_file.txt'
# 変更後のファイル名
new_file_name = 'new_file.txt'
# ファイル名を変更
os.rename(old_file_name, new_file_name)
print(f"{old_file_name} を {new_file_name} に変更しました。")
old_file.txt を new_file.txt に変更しました。

ファイル名にタイムスタンプを追加する方法

ファイル名にタイムスタンプを追加することで、ファイルのバージョン管理が容易になります。

以下は、現在の日時をファイル名に追加する例です。

import os
from datetime import datetime
# 元のファイル名
file_name = 'report.txt'
# 現在の日時を取得
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
# 新しいファイル名を作成
new_file_name = f"{file_name.split('.')[0]}_{timestamp}.txt"
# ファイル名を変更
os.rename(file_name, new_file_name)
print(f"新しいファイル名: {new_file_name}")
新しいファイル名: report_20231001_123456.txt

ファイル名の一括変更(リネーム)を行う方法

複数のファイル名を一括で変更する場合、osモジュールを使ってループ処理を行います。

以下は、特定の拡張子を持つファイルの名前を一括で変更する例です。

import os
# 対象のディレクトリ
directory = '/path/to/your/files'
# 拡張子を変更するファイル名のリスト
for filename in os.listdir(directory):
    if filename.endswith('.txt'):
        new_name = filename.replace('.txt', '.md')  # 拡張子を変更
        os.rename(os.path.join(directory, filename), os.path.join(directory, new_name))
        print(f"{filename} を {new_name} に変更しました。")
file1.txt を file1.md に変更しました。
file2.txt を file2.md に変更しました。

ファイル名の正規表現による操作

正規表現を使用することで、特定のパターンにマッチするファイル名を操作することができます。

以下は、ファイル名に数字が含まれるファイルをリネームする例です。

import os
import re
# 対象のディレクトリ
directory = '/path/to/your/files'
# 正規表現パターン
pattern = re.compile(r'file(\d+)')
for filename in os.listdir(directory):
    if pattern.match(filename):
        new_name = f"renamed_file{pattern.search(filename).group(1)}.txt"  # 新しいファイル名を作成
        os.rename(os.path.join(directory, filename), os.path.join(directory, new_name))
        print(f"{filename} を {new_name} に変更しました。")
file1.txt を renamed_file1.txt に変更しました。
file2.txt を renamed_file2.txt に変更しました。

よくある質問

os.pathとpathlibのどちらを使うべき?

os.pathpathlibはどちらもファイルパスを操作するための便利なツールですが、選択は使用する状況によります。

os.pathはシンプルで軽量ですが、機能が限られています。

一方、pathlibはオブジェクト指向で直感的に使えるため、複雑なファイル操作を行う際に便利です。

Python 3.4以降を使用している場合は、pathlibを選ぶことをお勧めします。

ファイル名に特殊文字が含まれている場合はどうする?

ファイル名に特殊文字が含まれている場合、特に注意が必要です。

特殊文字は、ファイルシステムによっては無効とされることがあります。

ファイル名を操作する前に、特殊文字を適切にエスケープするか、無効な文字を削除または置換することが重要です。

例えば、以下のように正規表現を使って無効な文字を取り除くことができます。

例:new_file_name = re.sub(r'[<>:"/\\|?*]', '_', original_file_name)

拡張子がないファイルの場合はどう扱う?

拡張子がないファイルを扱う場合、os.path.splitext()pathlib.Path().suffixを使用すると、拡張子が空の文字列として返されます。

ファイル名を取得する際には、拡張子がないことを考慮して処理を行う必要があります。

例えば、拡張子がないファイル名を取得する際には、以下のように条件分岐を行うことができます。

例:if not extension: print("このファイルには拡張子がありません。")

まとめ

この記事では、Pythonを使用してファイルパスから拡張子なしのファイル名を取得する方法や、ファイル名の操作に関するさまざまなテクニックを紹介しました。

特に、os.pathpathlibの使い方、ファイル名の変更やタイムスタンプの追加、一括変更、正規表現による操作について詳しく解説しました。

これらの知識を活用して、ファイル管理をより効率的に行うことができるでしょう。

ぜひ、実際のプロジェクトでこれらのテクニックを試してみてください。

  • URLをコピーしました!
目次から探す