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. 拡張子がないファイルへの対応
.suffix
やsplitext()
で取得する拡張子は、存在しない場合は空文字列になります。
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.path
と pathlib
の2通りで紹介しました。
os.path.splitext()
はシンプルで古いコードに向いているpathlib
は新しい書き方で、柔軟かつ直感的に使える- 実務では、拡張子によるファイルフィルタリングや変換処理で多用される
実務での活用例:ログファイル(.log)を日付付きで.csvに変換したり、拡張子ごとに処理を分けたりと、拡張子の操作は様々な場面で使えます。
ぜひこの記事を参考に、ファイル操作の基本をマスターして実務に活かしてみてください!