PythonでWindowsのファイルパスを書く方法
PythonでWindowsのファイルパスを書くときに、バックスラッシュ(\)の扱いでつまずいたので整理します。
結論としては、ちょっとした確認なら raw文字列、実際の処理では pathlib を使うのがおすすめです。
何が起きるのか
Windowsのパスは次のように \ を使います。
C:\Users\joji\Desktop\hoge.txt
ただし、Pythonの文字列では \ はエスケープ文字としても使われます。たとえば \n は改行、\t はタブとして扱われます。
そのため、Windowsのパスをそのまま書くと意図しない文字列になることがあります。
方法1: バックスラッシュを2つ書く
\ 自体を文字として扱いたい場合は、\\ と2つ書きます。
filepath = "C:\\Users\\joji\\Desktop\\hoge.txt"
print(filepath)
# C:\Users\joji\Desktop\hoge.txt
確実ですが、パスが長くなると少し読みにくいです。
方法2: raw文字列を使う
文字列の先頭に r を付けると、バックスラッシュをほぼそのまま扱えます。
filepath = r"C:\Users\joji\Desktop\hoge.txt"
print(filepath)
# C:\Users\joji\Desktop\hoge.txt
短いメモや固定パスを書くときは、この方法が分かりやすいです。
ただし、raw文字列は末尾を1つのバックスラッシュで終われません。
# これはエラーになる
# filepath = r"C:\Users\joji\Desktop\"
末尾に \ が必要な場合は、次のように書きます。
filepath = r"C:\Users\joji\Desktop" + "\\"
方法3: スラッシュで書く
Windowsでも、多くのPython処理では / 区切りのパスを扱えます。
filepath = "C:/Users/joji/Desktop/hoge.txt"
\ のエスケープを気にしなくてよいので、簡単なスクリプトではこれでも十分です。
方法4: pathlibを使う
ファイルやフォルダを扱う処理では、pathlib を使うと安全で読みやすくなります。
from pathlib import Path
filepath = Path("C:/Users/joji/Desktop/hoge.txt")
print(filepath.name) # hoge.txt
print(filepath.parent) # C:\Users\joji\Desktop
フォルダとファイル名をつなげるときも、文字列連結より分かりやすいです。
from pathlib import Path
desktop = Path.home() / "Desktop"
filepath = desktop / "hoge.txt"
print(filepath)
Path.home() を使うと、ユーザー名を直接書かずにホームフォルダを取得できます。
まとめ
| 書き方 | 例 | 使いどころ |
|---|---|---|
\\ を使う |
"C:\\Users\\joji" |
仕組みを理解するにはよい |
| raw文字列 | r"C:\Users\joji" |
固定パスを短く書きたいとき |
| スラッシュ | "C:/Users/joji" |
手軽に書きたいとき |
| pathlib | Path.home() / "Desktop" |
ファイル操作を書くとき |
個人的には、最初はraw文字列で覚えて、ファイル操作が増えてきたら pathlib に寄せるのがよさそうです。