[Python] ファイルパスから一部を取得する方法【ファイル名/拡張子/フォルダ名】
Pythonでは、os.path
やpathlib
モジュールを使用してファイルパスから特定の部分を取得できます。
os.path.basename()
でファイル名、os.path.splitext()
で拡張子、os.path.dirname()
でフォルダ名を取得可能です。
pathlib.Path
を使うと、Path.name
でファイル名、Path.suffix
で拡張子、Path.parent
でフォルダ名を取得できます。
pathlib
はPython 3.4以降で推奨される方法です。
ファイルパス操作の基本
Pythonでは、ファイルパスを操作するための便利なモジュールが用意されています。
主にos
モジュールとpathlib
モジュールが使用され、これらを使うことでファイル名、拡張子、フォルダ名を簡単に取得できます。
ファイルパスは、ファイルシステム内のファイルやディレクトリの位置を示す文字列であり、正確に操作することが重要です。
これにより、ファイルの管理やデータ処理が効率的に行えるようになります。
この記事では、これらのモジュールを使った具体的な方法を解説します。
ファイル名の取得方法
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
pathlib.Path.nameを使ったファイル名の取得
pathlib
モジュールを使用すると、オブジェクト指向の方法でファイル名を取得できます。
Path
オブジェクトのname
属性を使うことで、ファイル名を簡単に取得できます。
from pathlib import Path
file_path = Path('/path/to/your/file.txt')
file_name = file_path.name
print(file_name) # ファイル名を表示
file.txt
ファイル名から拡張子を除去する方法
ファイル名から拡張子を除去するには、os.path.splitext()関数
を使用します。
この関数は、ファイル名と拡張子を分割して返します。
import os
file_name_with_extension = 'file.txt'
file_name, _ = os.path.splitext(file_name_with_extension)
print(file_name) # 拡張子を除去したファイル名を表示
file
ファイル名取得時の注意点
ファイル名を取得する際には、以下の点に注意が必要です。
- パスが正しいことを確認する。
- 隠しファイルや特殊なファイル名(例:空白や特殊文字)に注意する。
- 相対パスと絶対パスの違いを理解しておく。
これらの注意点を考慮することで、ファイル名の取得がよりスムーズに行えます。
拡張子の取得方法
os.path.splitext()を使った拡張子の取得
os.path.splitext()関数
を使用すると、ファイル名と拡張子を分割して取得できます。
この関数は、ファイル名を含むパスを引数に取り、タプルとしてファイル名と拡張子を返します。
import os
file_path = '/path/to/your/file.txt'
file_name, file_extension = os.path.splitext(file_path)
print(file_extension) # 拡張子を表示
.txt
pathlib.Path.suffixを使った拡張子の取得
pathlib
モジュールのPath
オブジェクトを使用すると、suffix
属性で簡単に拡張子を取得できます。
この方法は、オブジェクト指向のスタイルで直感的に使用できます。
from pathlib import Path
file_path = Path('/path/to/your/file.txt')
file_extension = file_path.suffix
print(file_extension) # 拡張子を表示
.txt
複数拡張子のファイルの扱い方
複数の拡張子を持つファイル(例:archive.tar.gz
)を扱う場合、os.path.splitext()
を2回使用することで、最初の拡張子を取得できます。
pathlib
では、suffixes
属性を使用してすべての拡張子をリストとして取得できます。
# os.pathを使用した場合
import os
file_path = 'archive.tar.gz'
base_name, ext1 = os.path.splitext(file_path)
_, ext2 = os.path.splitext(base_name)
print(ext1, ext2) # 拡張子を表示
.gz .tar
# pathlibを使用した場合
from pathlib import Path
file_path = Path('archive.tar.gz')
extensions = file_path.suffixes
print(extensions) # 拡張子のリストを表示
['.tar', '.gz']
拡張子を変更する方法
ファイルの拡張子を変更するには、os.path.splitext()
を使用して元の拡張子を取得し、新しい拡張子と結合します。
pathlib
を使用する場合は、with_suffix()メソッド
を使うと簡単に変更できます。
# os.pathを使用した場合
import os
file_path = '/path/to/your/file.txt'
new_file_path = os.path.splitext(file_path)[0] + '.md'
print(new_file_path) # 新しいファイルパスを表示
/path/to/your/file.md
# pathlibを使用した場合
from pathlib import Path
file_path = Path('/path/to/your/file.txt')
new_file_path = file_path.with_suffix('.md')
print(new_file_path) # 新しいファイルパスを表示
/path/to/your/file.md
フォルダ名の取得方法
os.path.dirname()を使ったフォルダ名の取得
os.path.dirname()関数
を使用すると、指定したファイルパスからフォルダ名を取得できます。
この関数は、パスの最後の部分を除いた部分を返します。
import os
file_path = '/path/to/your/file.txt'
folder_name = os.path.dirname(file_path)
print(folder_name) # フォルダ名を表示
/path/to/your
pathlib.Path.parentを使ったフォルダ名の取得
pathlib
モジュールを使用すると、Path
オブジェクトのparent
属性を使ってフォルダ名を取得できます。
この方法は、オブジェクト指向のスタイルで直感的に使用できます。
from pathlib import Path
file_path = Path('/path/to/your/file.txt')
folder_name = file_path.parent
print(folder_name) # フォルダ名を表示
/path/to/your
フォルダ名の階層を取得する方法
フォルダ名の階層を取得するには、pathlib
のparents
属性を使用します。
これにより、指定したパスの親フォルダをリストとして取得できます。
from pathlib import Path
file_path = Path('/path/to/your/file.txt')
parent_folders = list(file_path.parents)
print(parent_folders) # 階層を表示
[PosixPath('/path/to/your'), PosixPath('/path/to'), PosixPath('/path')]
フォルダ名取得時の注意点
フォルダ名を取得する際には、以下の点に注意が必要です。
- パスが正しいことを確認する。
- フォルダが存在しない場合、空の文字列やエラーが返されることがある。
- 相対パスと絶対パスの違いを理解しておく。
- 隠しフォルダや特殊なフォルダ名(例:空白や特殊文字)に注意する。
これらの注意点を考慮することで、フォルダ名の取得がよりスムーズに行えます。
応用例:ファイルパスの操作
ファイルパスの結合方法
ファイルパスを結合するには、os.path.join()関数
を使用します。
この関数は、複数のパスを適切に結合し、プラットフォームに依存しない形式で返します。
import os
folder_path = '/path/to/your'
file_name = 'file.txt'
full_path = os.path.join(folder_path, file_name)
print(full_path) # 結合したファイルパスを表示
/path/to/your/file.txt
ファイルパスの正規化
ファイルパスを正規化するには、os.path.normpath()関数
を使用します。
この関数は、冗長なセパレーターや相対パスを解消し、標準的な形式に整えます。
import os
file_path = '/path//to/your/../file.txt'
normalized_path = os.path.normpath(file_path)
print(normalized_path) # 正規化したファイルパスを表示
/path/to/file.txt
絶対パスと相対パスの変換
相対パスを絶対パスに変換するには、os.path.abspath()関数
を使用します。
逆に、絶対パスを相対パスに変換するには、os.path.relpath()関数
を使用します。
import os
relative_path = 'file.txt'
absolute_path = os.path.abspath(relative_path)
print(absolute_path) # 絶対パスを表示
# 絶対パスを相対パスに変換
base_path = '/path/to/your'
relative_from_absolute = os.path.relpath(absolute_path, base_path)
print(relative_from_absolute) # 相対パスを表示
/current/working/directory/file.txt
file.txt
ファイルパスの存在確認
ファイルパスが存在するかどうかを確認するには、os.path.exists()関数
を使用します。
この関数は、指定したパスが存在する場合にTrue
を返します。
import os
file_path = '/path/to/your/file.txt'
exists = os.path.exists(file_path)
print(exists) # 存在確認の結果を表示
True # または False
ファイルパスの分割
ファイルパスを分割するには、os.path.split()関数
を使用します。
この関数は、パスをディレクトリ部分とファイル名部分に分けて返します。
import os
file_path = '/path/to/your/file.txt'
directory, file_name = os.path.split(file_path)
print(directory) # ディレクトリ部分を表示
print(file_name) # ファイル名部分を表示
/path/to/your
file.txt
応用例:ファイル名や拡張子の変更
ファイル名を変更する方法
ファイル名を変更するには、os.rename()関数
を使用します。
この関数は、元のファイル名と新しいファイル名を引数に取り、ファイル名を変更します。
import os
old_file_name = '/path/to/your/old_file.txt'
new_file_name = '/path/to/your/new_file.txt'
os.rename(old_file_name, new_file_name)
print(f'ファイル名を変更しました: {new_file_name}')
ファイル名を変更しました: /path/to/your/new_file.txt
拡張子を変更する方法
拡張子を変更するには、os.path.splitext()
を使用して元の拡張子を取得し、新しい拡張子と結合してos.rename()
で変更します。
import os
file_path = '/path/to/your/file.txt'
new_extension = '.md'
base_name, _ = os.path.splitext(file_path)
new_file_path = base_name + new_extension
os.rename(file_path, new_file_path)
print(f'拡張子を変更しました: {new_file_path}')
拡張子を変更しました: /path/to/your/file.md
ファイル名の一括変更スクリプト
特定のディレクトリ内のファイル名を一括で変更するには、os.listdir()
を使用してファイルのリストを取得し、ループで変更を行います。
import os
directory = '/path/to/your'
for file_name in os.listdir(directory):
if file_name.endswith('.txt'):
old_file_path = os.path.join(directory, file_name)
new_file_name = file_name.replace('.txt', '.md')
new_file_path = os.path.join(directory, new_file_name)
os.rename(old_file_path, new_file_path)
print(f'ファイル名を変更しました: {new_file_path}')
ファイル名を変更しました: /path/to/your/file1.md
ファイル名を変更しました: /path/to/your/file2.md
特定の拡張子を持つファイルの検索
特定の拡張子を持つファイルを検索するには、os.listdir()
を使用してディレクトリ内のファイルをリストアップし、条件に合うファイルをフィルタリングします。
import os
directory = '/path/to/your'
extension = '.txt'
matching_files = [file for file in os.listdir(directory) if file.endswith(extension)]
print(f'拡張子 {extension} を持つファイル:')
for file in matching_files:
print(file)
拡張子 .txt を持つファイル:
file1.txt
file2.txt
まとめ
この記事では、Pythonを使用してファイルパスやファイル名、拡張子を操作する方法について詳しく解説しました。
具体的には、os
モジュールとpathlib
モジュールを活用し、ファイル名や拡張子の取得、フォルダ名の操作、さらにはファイル名や拡張子の変更方法についても触れました。
これらの知識を活用することで、ファイルシステムの管理やデータ処理をより効率的に行えるようになるでしょう。
ぜひ、実際のプロジェクトや日常のタスクにこれらのテクニックを取り入れて、Pythonのスキルをさらに向上させてみてください。