PythonのPathの指定について

投稿日: 2024年2月14日

PythonでPathの書き方が分からないという困りごとがあります。
ここではWindowsにおける絶対パス(フルパス)と相対パスについて説明します。

絶対パスとは

絶対パスは、ファイルシステムのルートから目的のファイルまたはディレクトリまでの完全なパスです。

Windowsでは、ドライブレターから始まり、バックスラッシュ()を区切り文字として使用します。例えば、C:\Users\username\Documents\file.txtは、C:ドライブのUsersディレクトリ内にあるusernameのDocumentsディレクトリ内のfile.txtファイルへの絶対パスです。

相対パスとは

相対パスは、現在の作業ディレクトリに基づいて目的のファイルまたはディレクトリを指すパスです。

完全なパスを指定する代わりに、現在地からの相対的な位置を使用します。

例えば、現在のディレクトリがC:\Users\usernameで、同じディレクトリ内のDocumentsディレクトリにあるfile.txtファイルにアクセスしたい場合、相対パスはDocuments\file.txtになります。また、..を使用して親ディレクトリに移動することもできます。

次から本題に入ります。

Pythonでのパスの扱い

Pythonでこれらのパスを扱う場合、標準ライブラリのosモジュールやpathlibモジュールが便利です。

osモジュールを使って現在の作業ディレクトリを取得したり、絶対パスに変換したりできます。pathlibモジュールを使用すると、パスをオブジェクトとして扱い、操作が簡単になります。

ここで簡単なPythonの例を示します。

import os
from pathlib import Path

# 現在の作業ディレクトリを取得
current_dir = os.getcwd()
print(f"Current directory: {current_dir}")

# 絶対パスへの変換
relative_path = "Documents\\file.txt"
absolute_path = os.path.abspath(relative_path)
print(f"Absolute path: {absolute_path}")

# pathlibを使用
path = Path("Documents/file.txt")
absolute_path = path.resolve()
print(f"Absolute path (using pathlib): {absolute_path}")

このコードは、現在の作業ディレクトリを表示し、相対パスを絶対パスに変換する方法を示しています。

osとpathlibの両方の方法で絶対パスを取得する方法を示しています。Windowsでは、パスの区切り文字としてバックスラッシュ()を使用しますが、pathlibを使用すると、スラッシュ(/)を使用しても適切に処理されます。

Pythonでc:\から始まるパスを指定する方法

Cドライブの「C:\」から始める方法もあります。

PythonでC:\から始まるWindowsのパスを指定する際には、文字列リテラルでパスを表現します。

ただし、Windowsのパスにはバックスラッシュ()が含まれるため、Pythonの文字列リテラル内でこれを使用する際にはエスケープシーケンスとして扱われないように注意が必要です。以下にその方法をいくつか示します。

生の文字列リテラルを使用する

生の文字列リテラル(raw string literal)を使用すると、バックスラッシュをエスケープせずにそのまま文字列として扱えます。これは、文字列の前にrをつけることで実現できます。

path = r"C:\Users\username\Documents\file.txt"
print(path)

ダブルバックスラッシュを使用する

バックスラッシュをエスケープするために、パス内の各バックスラッシュをダブルバックスラッシュ(\\)で置き換えます。

path = "C:\\Users\\username\\Documents\\file.txt"
print(path)

スラッシュを使用する

Windowsのファイルシステムは、パス区切りとしてスラッシュ(/)も受け入れます。そのため、パスを指定する際にスラッシュを使用することもできます。

path = "C:/Users/username/Documents/file.txt"
print(path)

pathlibモジュールを使用する

Pythonのpathlibモジュールを使用すると、パスをオブジェクト指向の方法で扱うことができ、OS間の互換性も高まります。pathlibを使用すると、パス区切りに関する心配をする必要がなくなります。

from pathlib import Path

path = Path("C:/Users/username/Documents/file.txt")
# または
path = Path(r"C:\Users\username\Documents\file.txt")
print(path)

これらの方法を使用すると、PythonでC:\から始まるWindowsのパスを簡単に指定できます。

どの方法を選択するかは、個々の好みや特定の使用ケースによって異なりますが、pathlibモジュールの使用が最もモダンで柔軟なアプローチと言えるでしょう。

記事