Pythonでは、ファイルやディレクトリのパスを扱うために標準ライブラリのos
やpathlib
が提供されています。特にpathlib
は、パスをオブジェクトとして扱うことができ、OSによるパスの区切り文字の違いを吸収してくれます。
パスの生成
pathlib.Path()
を使用してパスを生成します。
from pathlib import Path
# 絶対パス
path = Path("/home/user/test.txt")
# 相対パス
path = Path("test.txt")
# 現在のディレクトリ
path = Path.cwd()
パスの結合
/
演算子を使用してパスを結合することができます。
from pathlib import Path
# Pathオブジェクト + Pathオブジェクト
path = Path("/home/user") / Path("test.txt")
# Pathオブジェクト + 文字列
path = Path("/home/user") / "test.txt"
パスの存在確認
path.exists()
でパスの存在確認ができます。
from pathlib import Path
path = Path("/home/user/test.txt")
# パスが存在するか
print(path.exists()) # True
# パスがファイルか
print(path.is_file()) # True
# パスがディレクトリか
print(path.is_dir()) # False
バックスラッシュの扱い
Windows環境でパスの設定をする場合など、バックスラッシュを含んだ文字列を扱う際には注意が必要です。バックスラッシュはPythonでエスケープシーケンスという処理に使われるため、想定した文字列と異なる扱いになることがあります。
# 想定した文字列
dir_name = 'C:\\testDir'
print(dir_name) # C:\testDir
# 実際に表示される文字列
print(dir_name) # C: estDir
この問題を解決するためには以下の方法があります。
- raw文字列を使用する: 文字列の最初に
r
をつけると、そのままの文字列として扱われ、エスケープされません。
# rを付けるとそのままの文字列として扱われ、エスケープされない
r'C:\\testDir'
- バックスラッシュをエスケープする: バックスラッシュを2つ
\\\\
書くとバックスラッシュとして扱われます。
# バックスラッシュを2つ「\\\\」書いてバックスラッシュ自体をエスケープさせる
'C:\\\\testDir'
- バックスラッシュをスラッシュに書き換える: パスに対してならこの方法が一番いいと考えられます。Linux、Macのパスの区切り文字文字はスラッシュになっているため、スラッシュに統一すると、環境を変更したときの不具合を防止することができます。
# 「\\」バックスラッシュを「/」スラッシュに書き換える
'C:/testDir'
以上、Pythonで文字列とパスを扱う方法について解説しました。これらの知識を活用して、Pythonでのファイル操作をより効率的に行いましょう。