見出し画像

Pythonでファイル拡張子を一気に変換(os & pathlib)

「フォルダ内にある膨大な数のファイル、
拡張子を一気に変換できたら良いな。」

って思ったことはありませんか?

それ、Pythonでやってしまいましょう。

本記事では Python の os モジュールや pathlib モジュールを使って、フォルダ内に入っているファイルの拡張子を変換する方法について書いていきます。

使用例
画像ファイルに「.png」と「.jpeg」が混載しているので統一したい。
「.txt」で保存されているデータを「.csv」に変換してデータ解析に使いたい。
など


開発環境

windows 10(64bit)
Visual Studio Code 1.48.0
python 3.8.2(32bit版)
Google Chrome


使用するモジュール

方法は様々あると思いますが、本記事では Python の os モジュールと pathlib モジュールを使います。両方とも標準ライブラリに含まれているので追加のインストールは必要ありません。各モジュールの概要と使い方の参考サイトへのリンクを記載しておきます。

os モジュール
主にファイルやディレクトリ操作が可能なモジュールです。ファイルの一覧やパスを取得したり、新規ファイルやディレクトリを作成することができます。

参考①:モジュール一覧
参考②:osモジュール主な使い方まとめ
pathlib モジュール
ファイルやディレクトリのパスをオブジェクトとして操作できる。

参考①:モジュール一覧
参考②:ファイル一覧取得


実際の使用例①

下記のディレクトリに作成した「test_folder」内に入っている Python ソースコード(拡張子 .py)をテキストファイル(拡張子 .txt)に変換する例をやってみます。

変換前

画像1

ソースコード

# =================================================
#           ライブラリインポート
# =================================================

# パスをオブジェクトとして操作・処理するライブラリ
import os
from pathlib import Path

# =================================================
#           設定
# =================================================

# ディレクトリ指定
directory = '/Python/test_folder/'


# =================================================
#           メイン
# =================================================

#---------- 指定フォルダ内のファイル拡張子を変更 ----------#
for f in Path(directory).rglob('*'):
   f.rename(directory + f.stem + '.txt')

変換後

画像2

上記のソースコードを実行した結果、フォルダ「test_folder」内に入っている全ての Python ソースコード(拡張子 .py)がテキストファイル(拡張子 .txt)に変換されています。for 文を使うことで、すべてのファイルを一気に変換することができます。


実際の使用例②

別の使用例として、画像ファイルの拡張子「.png」を「.jpeg」に変換する例をやってみます。

変換前

画像3

ソースコード

# =================================================
#           ライブラリインポート
# =================================================

# パスをオブジェクトとして操作・処理するライブラリ
import os
from pathlib import Path

# =================================================
#           設定
# =================================================

# ディレクトリ指定
directory = '/Python/test_folder/'


# =================================================
#           メイン
# =================================================

#---------- 指定フォルダ内のファイル拡張子を変更 ----------#
for f in Path(directory).rglob('*'):
   f.rename(directory + f.stem + '.jpeg')

変換後

画像4


解説

いくつかポイントをピックアップして解説します。

glob
引数に指定されたパターンに適合するファイルのパス名を取得します。今回の例では引数を「'*'」としているので、指定したディレクトリ内に存在する全ファイルのパス名を取得しています。もし「.py」にすれば拡張子が「.py」のファイルパス名を取得します。
stem
拡張子なしのファイル名の文字列をstem属性で取得しています。
参考:pathlib使い方


おわりに

本記事では 、Python の os モジュールと pathlib モジュールを使って、フォルダ内に入っているファイルの拡張子を変換する方法をやってみました。私自身は、これを単体で使うことはあまりなく、データ解析の前処理をする際に他の処理と組み合わせて使用しています。ファイルの拡張子変更、ファイル読み出し、データ変換、csv出力など。

色々な処理を扱えるようになってくると、それぞれの処理を組み合わせることにより、今まで時間がかかっていた作業を一気に効率化することができます。今後も色々な処理について記事を書いていこうと思っているので、ぜひ読んでみてください。

以上

何かお役に立てたら、サポートしていただけると嬉しいです!モチベーションを高めて、アウトプットしていきます!