[Python] ファイルパスから拡張子なしのファイル名を取得する方法
Pythonでファイルパスから拡張子なしのファイル名を取得するには、標準ライブラリのos.path
またはpathlib
を使用します。
os.path
ではos.path.splitext()
で拡張子を分離し、os.path.basename()
でファイル名を取得します。
pathlib
ではPath.stem
を使うと簡単に拡張子なしのファイル名を取得できます。
どちらもファイルパス操作に便利な方法です。
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 に変更しました。
まとめ
この記事では、Pythonを使用してファイルパスから拡張子なしのファイル名を取得する方法や、ファイル名の操作に関するさまざまなテクニックを紹介しました。
特に、os.path
とpathlib
の使い方、ファイル名の変更やタイムスタンプの追加、一括変更、正規表現による操作について詳しく解説しました。
これらの知識を活用して、ファイル管理をより効率的に行うことができるでしょう。
ぜひ、実際のプロジェクトでこれらのテクニックを試してみてください。