Pythonでファイルやフォルダを操作する際、ファイルパスを指定することが頻繁にあります。
しかし、プラットフォーム(WindowsやMac、Linux)による違いや、エスケープシーケンスなどで混乱することも多いです。
Pythonにおけるパスの書き方をまとめてみます。
Contents
パスの基礎
絶対パスと相対パス
- 絶対パス
ファイルシステムのルート(WindowsではC:\
など、Mac/Linuxでは/
)から始まる完全なパス。pythonコードをコピーする# Windows例 "C:\\Users\\YourName\\Documents\\file.txt" # Mac/Linux例 "/home/YourName/Documents/file.txt"
- 相対パス
現在の作業ディレクトリからの相対位置を示します。pythonコードをコピーする# 現在のディレクトリの "subfolder/file.txt" "subfolder/file.txt" # 親ディレクトリのファイル "../file.txt"
OSによる違い
- Windowsではバックスラッシュ(
\
)を使います。 - Mac/Linuxではスラッシュ(
/
)を使います。
Pythonではこれらの違いを吸収するために、標準ライブラリが提供する便利なツールを使うのがおすすめです。
パスの記述方法
バックスラッシュの問題と解決法
Windowsでバックスラッシュをそのまま使うと、エスケープシーケンスとして解釈されることがあります。
path = "C:\Users\YourName\Documents\file.txt" # エラーの可能性
解決策1: エスケープシーケンスを使う
バックスラッシュを2つ書きます。
path = "C:\\Users\\YourName\\Documents\\file.txt"
解決策2: 生文字列(Raw String)を使う
文字列の前にr
を付けると、エスケープシーケンスが無効化されます。
path = r"C:\Users\YourName\Documents\file.txt"
標準ライブラリの活用
os.pathモジュール
os.path
は、OSに依存しないパス操作を提供します。
import os
# パスの結合
path = os.path.join("folder", "subfolder", "file.txt")
print(path) # Windowsでは "folder\subfolder\file.txt
pathlibモジュール
Python 3.4以降では、pathlib
が推奨されています。
Path
オブジェクトを使うことで、より直感的なパス操作が可能です。
from pathlib import Path
# パスの結合
path = Path("folder") / "subfolder" / "file.txt"
print(path) # Windowsでは "folder\subfolder\file.txt"
# 絶対パスを取得
absolute_path = path.resolve()
print(absolute_path)
実用例
ファイルの存在確認
from pathlib import Path
file_path = Path("folder/subfolder/file.txt")
if file_path.exists():
print("ファイルが存在します")
else:
print("ファイルが存在しません")
ディレクトリの作成
from pathlib import Path
dir_path = Path("new_folder")
dir_path.mkdir(parents=True, exist_ok=True) # フォルダが存在しない場合に作成
print("ディレクトリを作成しました")
ファイルの読み書き
from pathlib import Path
# ファイルに書き込み
file_path = Path("example.txt")
file_path.write_text("こんにちは、Python!")
# ファイルを読み込み
content = file_path.read_text()
print(content)
プラットフォームを意識したコードの書き方
os
や pathlib
を使うことで、OSに依存しないコードを書けます。
また、プラットフォームごとのパスセパレータを取得する場合は次の方法を利用します。
パスセパレータの確認
import os
print(os.sep) # Windows: "\", Mac/Linux: "/"
おすすめ
pathlib
を使う
簡潔な記述が可能になります。- エスケープシーケンスの回避
生文字列(r""
)または標準ライブラリを活用します。 - OS依存を排除
os.path
やpathlib
を使うことでコードの移植性を高めます。
まとめ
Pythonでファイルパスを扱う際は、プラットフォームやエスケープシーケンスに注意しつつ、標準ライブラリを活用することで安全かつ簡単に操作できます。