Pythonでファイルのコピーや移動、ファイルの内容を読み込んで編集し別の形式で保存。などファイルを扱う機会は非常に多い。
それらの処理に必要な情報が
「ファイルのパス」「ファイル名」そして今回取り上げる「拡張子」
「拡張子」はファイルのフィルタリングや、別の形式で保存したりする際にとても重要。
Pythonにはパス文字列から拡張子を分割するos.path.splitext()と、条件に適合するファイルパスを取得するglobモジュールがあります。
どちらもPythonで拡張子を扱うの場合には必要なテクニックなので是非参考にしてください。
|
splitext():パス文字列としてファイルのパスから拡張子を取得する
Pythonでファイルパスを扱う場合は、os.path モジュールを使用します。
os.pathは、ファイルパスからディレクトリ名やファイル名だけを取得したり、ファイルの更新時刻やファイルのサイズなど、ファイル関係を扱う際には必須のモジュールです。
ファイルパスからディレクトリ名を取得 | os.path.dirname(path) |
ファイルパスからファイル名を取得 | os.path.basename(path) |
ファイルの更新時刻を取得 | os.path.getmtime(path) |
ファイルのサイズを取得 | os.path.getsize(path) |
splitext()でファイルパスと拡張子を分割
os.pathモジュールの関数 splitext() でファイルパスから拡張子を分割する事ができます。
os.path.splitext() にファイルパスを指定、戻り値をsplitext_fileに代入。printで出力します。
import os
file_path = "D:/liquidjumper/new_textfile.txt"
splitext_file = os.path.splitext(file_path)
print(splitext_file)
実行:
ファイルパス「’D:/liquidjumper/new_textfile’」と拡張子「’.txt’」が分割され配列タプルで取得されました。
(‘D:/liquidjumper/new_textfile’, ‘.txt’)
ファイルパスと拡張子を配列タプルで取得できたので、次はここから拡張子だけを取り出します。
配列タプルから拡張子だけを取得するには配列リストと同様に、要素のインデックスを指定するだけ。
os.path.splitext(file_path)で返されるタプルにインデックス[1]を指定、拡張子だけを取得します
import os
file_path = "D:/liquidjumper/new_textfile.txt"
file_extension = os.path.splitext(file_path)[1] ##タプルの2番目の要素[1]を指定
print(file_extension)
実行:
タプルの2番目の要素、「.txt」だけが出力されました
.txt
splitext()で「.」無しの拡張子を取得
os.path.splitext(file_path)[1] で拡張子を取得する事はできましたが、拡張子の前にあるドット「.」が付いたままです。
os.path.split()で、”.”を分割文字に指定すれば、ドット「.」を外す事はできますがスマートじゃない。
Pythonには、リストやタプルそして文字列をインデックスで指定して取得する機能「スライス」があります。
スライスを使えば拡張子からドット「.」を外す処理も簡単。
file_extension = os.path.splitext(file_path)[1] で取得したドット付き拡張子「.txt」にインデックス[1:]を指定。
2番目の文字「t」から最後までを取り出します。
import os
file_path = "D:/liquidjumper/new_textfile.txt"
file_extension = os.path.splitext(file_path)[1] [1:]
print(file_extension)
実行:
ドット付き拡張子「.txt」から「.」を外す事ができました。
txt
↓スライスの使い方についてはこの記事で↓
|
glob():ディレクトリから指定した拡張子のファイルだけを取得する
Pythonで指定したディレクトリのファイル一覧を取得するには、次の様な方法があります。
os.listdir() にディレクトリパスを指定。ディレクトリ内のディレクトリ・ファイル名一覧をリストで取得。for文で全て出力します。
import os
dir_path = "D:/liquidjumper"
files = os.listdir(dir_path)
for i_file in files:
print(i_file)
実行:
指定したディレクトリ下にあるディレクトリやファイル全ての一覧が出力されました。
javascript
new_textfile.txt
python
textfile_shift_jis.txt
textfile_utf8 – コピー.txt
textfile_utf8.txt
todofuken.xls
todofuken.xlsx
unity
wakayama.xls
単純にディレクトリの一覧情報を取得したい場合はこれでも問題ないのですが、特定の拡張子だけのファイルが欲しい場合は、if文で拡張子をチェックする等の処理コードが必要になります。
特定の拡張子のファイルを取得する為だけにif文を使うのは面倒
Pythonには、「指定した拡張子すべて」などの条件を設定してファイルやディレクトリを取得する方法があります。
|
globモジュール:ワイルドカードによるパターンマッチング
Pythonで、正規表現やワイルドカードを設定しファイルやディレクトリを扱う場合は
globモジュール
を使います。
拡張子「txt」のみのファイルを取得する場合は、”D:/liquidjumper/*txt” の様にディレクトリパスにワイルドカード「*拡張子」を追加します。
glob.glob() にワイルドカード付きのディレクトリパスを指定。取得した配列をfor文でprint出力します。
import glob
dir_path = "D:/liquidjumper/*txt" ##ワイルドカードを設定「*txt」
txt_files = glob.glob(dir_path)
for i_txt_file in txt_files:
print(i_txt_file)
実行:
拡張子を条件にしたif文の処理をせずに、指定したディレクトリ下にある拡張子「txt」のファイルだけを取得する事ができました。
D:/liquidjumper\new_textfile.txt
D:/liquidjumper\textfile_shift_jis.txt
D:/liquidjumper\textfile_utf8 – コピー.txt
D:/liquidjumper\textfile_utf8.txt
|
【TechAcademy(テックアカデミー)ブートキャンプ】
TechAcademy [テックアカデミー]
では、初心者でも短期間でPython・機械学習が学べるオンラインブートキャンプPythonコース
を開催しています。
過去に独学のプログラミング学習で挫折した経験のある方でも、パーソナルメンターがビデオとチャットでサポート。疑問点を直ぐに解決して次の課題に取り組めます。
オンラインプログラミングスクール受講者No.1、TechAcademy(テックアカデミー)の学習システムの内容や疑問点を聞く事ができるTechAcademy無料動画説明会
も実施されているので、ぜひ参加してみてください。
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|