[Python] ファイルパスから一部を取得する方法【ファイル名/拡張子/フォルダ名】

Pythonでは、os.pathpathlibモジュールを使用してファイルパスから特定の部分を取得できます。

os.path.basename()でファイル名、os.path.splitext()で拡張子、os.path.dirname()でフォルダ名を取得可能です。

pathlib.Pathを使うと、Path.nameでファイル名、Path.suffixで拡張子、Path.parentでフォルダ名を取得できます。

pathlibはPython 3.4以降で推奨される方法です。

この記事でわかること
  • Pythonでのファイルパス操作の基本
  • ファイル名や拡張子の取得方法
  • フォルダ名の取得と階層の操作
  • ファイル名や拡張子の変更方法
  • 特定の条件でのファイル検索方法

目次から探す

ファイルパス操作の基本

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

フォルダ名の階層を取得する方法

フォルダ名の階層を取得するには、pathlibparents属性を使用します。

これにより、指定したパスの親フォルダをリストとして取得できます。

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

よくある質問

os.pathとpathlibの違いは?

os.pathは、Pythonの標準ライブラリで提供されるモジュールで、ファイルパスの操作を行うための関数が含まれています。

一方、pathlibは、オブジェクト指向のアプローチを提供する新しいモジュールで、ファイルシステムのパスをPathオブジェクトとして扱います。

pathlibは、より直感的で可読性の高いコードを書くことができ、メソッドチェーンを利用して複雑な操作を簡潔に表現できます。

拡張子がないファイルの扱い方は?

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

これを考慮して、拡張子の有無を確認する条件分岐を行うことが重要です。

例えば、拡張子がないファイルに対して特定の処理を行いたい場合は、以下のように記述します。

import os
file_name = 'file_without_extension'
_, ext = os.path.splitext(file_name)
if not ext:
    print('このファイルには拡張子がありません。')

複数階層のフォルダ名を取得するには?

複数階層のフォルダ名を取得するには、pathlibparents属性を使用します。

この属性は、指定したパスの親フォルダをリストとして取得でき、階層を簡単に辿ることができます。

以下のように使用します。

from pathlib import Path
file_path = Path('/path/to/your/file.txt')
parent_folders = list(file_path.parents)
for folder in parent_folders:
    print(folder)

このコードを実行すると、/path/to/your/path/to/pathといった親フォルダが順に表示されます。

これにより、ファイルの階層構造を把握することができます。

まとめ

この記事では、Pythonを使用してファイルパスやファイル名、拡張子を操作する方法について詳しく解説しました。

具体的には、osモジュールとpathlibモジュールを活用し、ファイル名や拡張子の取得、フォルダ名の操作、さらにはファイル名や拡張子の変更方法についても触れました。

これらの知識を活用することで、ファイルシステムの管理やデータ処理をより効率的に行えるようになるでしょう。

ぜひ、実際のプロジェクトや日常のタスクにこれらのテクニックを取り入れて、Pythonのスキルをさらに向上させてみてください。

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