Python|ファイルの拡張子を取得・変更する

1. はじめに

Pythonでファイルを操作する際、ファイルの拡張子を取得したり変更したりする処理はよく登場します。たとえば、.txtファイルを.csvに変換する処理や、特定の拡張子だけを対象に処理を行う場合などです。

本記事では、Python初心者〜中級者向けに、ファイルの拡張子を取得する方法と変更する方法を具体的なコード例とともに解説します。

Python標準ライブラリである os モジュールと pathlib モジュールを中心に、実務でもよく使われる形で紹介していきます。

 

2. Pythonでファイルの拡張子を取得・変更する基本

2-1. 拡張子を取得する:os.path.splitext() を使う

os.path.splitext() を使えば、ファイル名と拡張子を分離できます。

import os

file_path = "example.txt"
file_name, file_ext = os.path.splitext(file_path)

print("ファイル名:", file_name)
print("拡張子:", file_ext)

実行結果:

ファイル名: example
拡張子: .txt

この方法では拡張子に . が含まれて返される点に注意してください。

2-2. pathlib.Path を使って拡張子を取得

Python 3.4以降では、pathlib モジュールを使うと、よりオブジェクト指向的に操作できます。

from pathlib import Path

file_path = Path("data/sample.csv")
print("拡張子:", file_path.suffix)

実行結果:

拡張子: .csv

.suffix属性を使うことで、拡張子を直接取得できます。複数の拡張子(例: .tar.gz)を扱いたい場合は .suffixes を使うと便利です。

2-3. 拡張子を変更する:osで書き換え

import os

file_path = "report.doc"
file_name, _ = os.path.splitext(file_path)
new_file = file_name + ".pdf"
print("新しいファイル名:", new_file)

実行結果:

新しいファイル名: report.pdf

splitext()で分離したファイル名に新しい拡張子を付けることで、簡単に変更できます。

2-4. pathlib で拡張子を変更

pathlib では with_suffix() を使って拡張子の変更が可能です。

from pathlib import Path

file_path = Path("image.jpeg")
new_path = file_path.with_suffix(".png")

print("新しいファイル名:", new_path)

実行結果:

新しいファイル名: image.png

with_suffix() は新しい Path オブジェクトを返すため、元のファイル名は変更されません。

 

3. よくある使い方・応用例

3-1. 指定ディレクトリ内のファイルの拡張子を一括取得

from pathlib import Path

dir_path = Path("documents")
for file in dir_path.iterdir():
    if file.is_file():
        print(file.name, "=>", file.suffix)

実行結果:

report1.txt => .txt
summary.pdf => .pdf
notes.docx => .docx

このようにして、特定のフォルダ内のすべてのファイルの拡張子を一覧で取得できます。

3-2. .txt ファイルを .csv に変換(リネーム)

from pathlib import Path

file_path = Path("data.txt")
new_path = file_path.with_suffix(".csv")

# 実際にファイルをリネーム
file_path.rename(new_path)

print("ファイルをリネームしました:", new_path)

実行結果:

ファイルをリネームしました: data.csv

このようにして、実際にファイルの拡張子を変更して保存することも可能です。

3-3. 特定の拡張子だけをフィルタリング

from pathlib import Path

target_ext = ".jpg"
image_dir = Path("images")
jpg_files = [f for f in image_dir.iterdir() if f.suffix == target_ext]

print("JPGファイル一覧:")
for f in jpg_files:
    print(f.name)

実行結果:

JPGファイル一覧:
photo1.jpg
sunset.jpg

フォルダ内の画像ファイルだけを処理したいときに役立ちます。

 

4. 注意点・エラー対策

4-1. 拡張子がないファイルへの対応

.suffixsplitext()で取得する拡張子は、存在しない場合は空文字列になります。

from pathlib import Path

file_path = Path("README")
print("拡張子:", file_path.suffix)

実行結果:

拡張子: 

拡張子が存在しないことを前提に処理を組むと安全です。

4-2. 複数拡張子(例: .tar.gz)の処理

.suffixでは .gz のみ取得されます。すべて取得するには .suffixes を使いましょう。

file_path = Path("backup.tar.gz")
print("拡張子リスト:", file_path.suffixes)

実行結果:

拡張子リスト: ['.tar', '.gz']

複数の拡張子があるファイルを正しく扱いたい場合は、suffixesを活用しましょう。

 

5. まとめ

今回はPythonでファイルの拡張子を取得・変更する方法について、os.pathpathlib の2通りで紹介しました。

  • os.path.splitext() はシンプルで古いコードに向いている
  • pathlib は新しい書き方で、柔軟かつ直感的に使える
  • 実務では、拡張子によるファイルフィルタリングや変換処理で多用される

実務での活用例:ログファイル(.log)を日付付きで.csvに変換したり、拡張子ごとに処理を分けたりと、拡張子の操作は様々な場面で使えます。

ぜひこの記事を参考に、ファイル操作の基本をマスターして実務に活かしてみてください!

タイトルとURLをコピーしました