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

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

os.path.basename()を使うと、ファイルパスからファイル名を取得できます。

また、pathlib.Pathname属性を使う方法もあります。

例えば、os.path.basename('/path/to/file.txt')'file.txt'を返し、pathlib.Path('/path/to/file.txt').nameも同様に'file.txt'を返します。

この記事でわかること
  • 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.split()との違い

os.path.split()関数は、ファイルパスをディレクトリ部分とファイル名部分に分割します。

これに対して、os.path.basename()はファイル名のみを取得します。

以下のコードでその違いを確認できます。

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.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はプラットフォームに依存するため、WindowsとUnix系のパスの区切り文字が異なることに注意が必要です。

os.path.join()を使用することで、プラットフォームに応じたパスを作成できます。

  • ファイルの存在確認: os.pathを使用する際は、ファイルが存在するかどうかを確認するためにos.path.exists()を併用することが推奨されます。
  • エンコーディング: ファイル名に特殊文字が含まれている場合、エンコーディングに注意が必要です。

特に日本語のファイル名を扱う際は、適切なエンコーディングを使用してください。

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オブジェクトのname属性を使う方法

Pathオブジェクトには、name属性があり、これを使うことでファイル名を簡単に取得できます。

from pathlib import Path
file_path = Path('/path/to/your/file.txt')
file_name = file_path.name
print(file_name)  # ファイル名を出力
file.txt

Pathオブジェクトのstemとsuffixを使った拡張子の分離

Pathオブジェクトには、stemsuffixという属性があり、これを使うことでファイル名と拡張子を分離できます。

from pathlib import Path
file_path = Path('file.txt')
file_stem = file_path.stem  # 拡張子を除いたファイル名
file_suffix = file_path.suffix  # 拡張子
print("ファイル名:", file_stem)  # 拡張子を除いたファイル名を出力
print("拡張子:", file_suffix)      # 拡張子を出力
ファイル名: file
拡張子: .txt

pathlibを使う際のメリットとデメリット

スクロールできます
メリットデメリット
オブジェクト指向で直感的に扱えるPython 3.4以降でしか使用できない
パスの操作が簡単で可読性が高い一部の古いライブラリとの互換性がない
プラットフォームに依存しない学習コストがある場合がある

pathlibは、ファイルパスを扱う際に非常に便利なモジュールですが、使用する際はPythonのバージョンに注意が必要です。

また、特定の状況では従来のos.pathと併用することも考慮しましょう。

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

ファイル名の操作は、プログラミングにおいて非常に一般的なタスクです。

ここでは、Pythonを使ってファイル名に関するさまざまな操作を行う方法を紹介します。

ファイル名から拡張子を変更する方法

ファイル名の拡張子を変更するには、os.path.splitext()を使って元のファイル名を分離し、新しい拡張子を付け加えることができます。

import os
original_file = 'document.txt'
new_extension = '.md'
# 拡張子を変更
name, _ = os.path.splitext(original_file)
new_file = name + new_extension
print(new_file)  # 新しいファイル名を出力
document.md

ファイル名をリネームする方法

ファイル名をリネームするには、os.rename()関数を使用します。

この関数は、元のファイル名と新しいファイル名を引数に取ります。

import os
original_file = 'old_name.txt'
new_file = 'new_name.txt'
# ファイル名をリネーム
os.rename(original_file, new_file)
print(f"{original_file} を {new_file} にリネームしました。")
old_name.txt を new_name.txt にリネームしました。

複数のファイル名を一括で取得する方法

特定のディレクトリ内のすべてのファイル名を一括で取得するには、os.listdir()を使用します。

これにより、指定したディレクトリ内のファイル名のリストを取得できます。

import os
directory_path = '/path/to/your/directory'
file_names = os.listdir(directory_path)
# ファイル名を出力
for file_name in file_names:
    print(file_name)
file1.txt
file2.txt
image.png

ファイル名の大文字・小文字を変換する方法

ファイル名の大文字・小文字を変換するには、Pythonの文字列メソッドを使用します。

upper()メソッドで大文字に、lower()メソッドで小文字に変換できます。

original_file = 'example.txt'
# 大文字に変換
upper_file = original_file.upper()
print(upper_file)  # 大文字に変換したファイル名を出力
# 小文字に変換
lower_file = original_file.lower()
print(lower_file)  # 小文字に変換したファイル名を出力
EXAMPLE.TXT
example.txt

これらの操作を組み合わせることで、ファイル名の管理や整理が効率的に行えるようになります。

Pythonを活用して、ファイル名の操作を自動化することが可能です。

よくある質問

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

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

os.pathは古くから存在し、シンプルな関数が多いため、軽量なスクリプトや古いコードベースでの使用に適しています。

一方、pathlibはオブジェクト指向で直感的に扱えるため、可読性が高く、複雑なパス操作を行う際に便利です。

新しいプロジェクトでは、pathlibを使用することをお勧めします。

ファイル名に特殊文字が含まれている場合の対処法は?

ファイル名に特殊文字が含まれている場合、エンコーディングに注意が必要です。

特に日本語や記号が含まれるファイル名を扱う際は、UTF-8エンコーディングを使用することが一般的です。

Pythonでは、ファイル名を扱う際に特別な処理は必要ありませんが、ファイルシステムによっては特殊文字が問題を引き起こすことがあるため、ファイル名を正規化することが推奨されます。

例えば、unicodedataモジュールを使って正規化することができます。

拡張子がないファイル名を取得するには?

拡張子がないファイル名を取得するには、os.path.splitext()pathlib.Path.stemを使用することができます。

これらのメソッドは、ファイル名から拡張子を分離するため、拡張子がない場合でもファイル名を正しく取得できます。

以下はその例です。

import os
file_name = 'file_without_extension'
name, extension = os.path.splitext(file_name)
print(name)  # 拡張子がないファイル名を出力
file_without_extension

または、pathlibを使用する場合は次のようになります。

from pathlib import Path
file_path = Path('file_without_extension')
print(file_path.stem)  # 拡張子がないファイル名を出力
file_without_extension

これにより、拡張子がないファイル名を簡単に取得することができます。

まとめ

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

特に、os.pathpathlibの使い方を比較し、それぞれの利点を考慮しながら、ファイル名の取得や拡張子の変更、リネーム、特殊文字の処理方法について具体的なコード例を通じて説明しました。

これらの知識を活用することで、ファイル名の管理や操作を効率的に行うことができ、日常のプログラミング作業をよりスムーズに進めることが可能になります。

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

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