こんにちは、りょうです!
os.pathモジュールはパスからファイル名やディレクトリ名を取得したり、パスを分割・結合したりする際に使用されるモジュールです。
パス操作はPythonでデータを扱う際に、必ず必要な操作です。ぼくも日常的にos.pathモジュールでパスの結合や分割を行い、意図したファイルパスを作成しています。
Python初心者のかたはぜひ本記事で、基本的なパス操作を理解し、サクッとパスの操作を行えるようにしましょう!
- パスの結合(os.path.join)
- パスの分割(os.path.split, os.path.splitext)
- ファイル名の取得(os.path.basename)
- ディレクトリ名の取得(os.path.dirname)
本記事を読んだあとは実際に手を動かして、紹介したメソッドがどのような処理をするか確認してみてください!
os.pathモジュールの概要
下記にos.pathモジュールのパス分割・結合、ファイル名やディレクトリ名の取得で使用するメソッドをまとめました。
メソッド名 | 説明 |
---|---|
split() | 指定されたパスのファイル名と、それまでのパスを返します。 |
splitext() | 指定されたファイルの拡張子と拡張子を除くファイル名までのパスを返します。 |
join() | パスとファイル名などを結合します。 |
basename() | 指定されたパスのファイル名を返します。 |
dirname() | 指定されたパスからファイル名を除いたものを返します。 |
コードを記述するさいに、”import os”の1行を入れて、”os”をインポートするだけで、os.path()の各呼び出しが行えます。
以降では、実際にコードをみながらそれぞれのメソッドの処理を理解していきます!
パスの分割(os.path.split, os.path.splitext)
os.path.split()
os.path.split()
関数は、パスを最後の区切り文字(スラッシュやバックスラッシュなど)で分割し、ディレクトリ部分と最後の部分(通常はファイル名)を返します。
import os
full_path = "/path/to/directory"
path, filename = os.path.split(full_path)
print(path)
# /path/to
print(filename)
# directory
os.path.splitext()
os.path.splitext()
関数は、与えられたパスをファイル名と拡張子に分割します。
import os
full_path = "/path/to/directory/file.txt"
filename, extension = os.path.splitext(full_path)
print(filename)
# /path/to/directory/file
print(extension)
# .txt
拡張子は、最初のピリオドから始まる最後の部分を含みます。もしファイル名にピリオドが含まれていなければ、拡張子は空文字列となります。
なので、今回の例の場合、.txt がなければextensionには値が格納されません。
パスの結合(os.path.join)
os.path.join()
関数は、引数として与えられた複数のパスを結合して一つのパスを作成します。
import os
path1 = "/path/to"
path2 = "directory"
full_path = os.path.join(path1, path2)
print(full_path)
# /path/to/directory
ファイル名の取得(os.path.basename)
os.path.basename()
関数は、与えられたパスから最後の部分(通常はファイル名)を返します。
import os
full_path = "/path/to/directory/file.txt"
filename = os.path.basename(full_path)
print(filename)
# file.txt
上記の例だと、full_pathに格納された値である “/path/to/directory/file.txt”の最後の部分の file.txt を返しています。
ディレクトリ名の取得(os.path.dirname)
os.path.dirname()
関数は、与えられたパスからディレクトリ部分を抽出して返します。
import os
full_path = "/path/to/directory/file.txt"
directory = os.path.dirname(full_path)
print(directory)
# /path/to/directory
上記の例だと、full_pathに格納された値である “/path/to/directory/file.txt”のディレクトリ部分にあたるを”/path/to/directory”返しています。
os.pathのユースケース
1.パスに取得日を挿入する
os.pathモジュールを使ってファイルパスに、今日の日付をYYYYMMDD形式でディレクトリとして挿入する例を考えてみます。
import os
from datetime import datetime
today = datetime.today().date() # 2023-06-21
date_string = today.strftime('%Y%m%d') # 20230621
full_path = "/path/to/directory/file.txt"
dir_path, filename = os.path.split(full_path)
new_full_path = os.path.join(dir_path, date_string, filename)
# /path/to/directory/20230621/file.txt
まず元のパスをos.path.split()関数でディレクトリパスとファイル名に分割します。
次に日付ディレクトリをディレクトリパスに追加とファイル名の結合をし、想定した新しいパスを作成します。
2.拡張子を変更する
拡張子を変更する例を考えてみます。
業務ではファイル圧縮などでinputとoutputでファイル形式の変換を行うケースがあると思います。
import os
full_path = "/path/to/directory/file.txt"
filename, _ = os.path.splitext(full_path)
new_full_path = filename + ".csv"
print(new_full_path)
# /path/to/directory/file.csv
まとめ
いかがでしたか?本記事ではos.pathモジュールについて説明しました。
最後には2パターンの簡単なユースケースを交えて、手と頭を使いながらos.pathモジュールについて理解を深めていただけたかと思います。
パスの操作はデータを扱っていると、ファイルの圧縮や取得日の挿入などで必要になる作業です。
ぜひこの記事が皆さんの一助になれば幸いです。最後まで読んでいただきありがとうございました。
コメント