『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

パスの取得と操作

パス (path)

パス (path) とはファイルあるいはフォルダ (ディレクトリ) の位置を示す情報です。パスの記述形式は OS ごとに異なります。たとえば Windows の場合、ファイルやフォルダをバックスラッシュ (\) で区切って階層構造を表記します。

C:\Users\blogcat\Desktop\mydata.csv

Mac や Linux では

/home/desktop/mydata.csv

のように、階層をスラッシュ (/) で区切ります。

絶対パス(absolute path)

階層構造の頂点 (ルートディレクトリ) を起点に目的のファイルやフォルダまでの経路情報をすべて記述したパスを絶対パス (absolute path) またはフルパス (full path) とよびます。
 
Windows であれば、ドライブ名から始まる

C:\Users\blogcat\Desktop\mydata.csv

のような記述が絶対パスです。Mac や Linux ではルートディレクトリをスラッシュで表し、

/home/desktop/mydata.csv

のように記述すると絶対パスとなります。

相対パス (relative path)

作業フォルダ (カレントディレクトリ) を起点に目的のファイルやフォルダまでの経路情報を記載したパスを相対パス(relative path) といいます。たとえば、Windows で作業フォルダの下に blogcat というフォルダがあって、その下に mycode.ipynb というファイルが存在する場合は

blogcat\mycode.ipynb

のように指定します。Mac や Linux であれば現在の位置を表すドット (.) を先頭に添えて

./blogcat/mycode.ipynb

と記述します。ちなみに .ipynb は Jupyter Notebook のファイルの拡張子です。

Windowsのパス

Windows ではバックスラッシュ (\) でパスを区切るので、Python で Windows のパスを文字列として扱う場合は、raw 文字 r などを使ってバックスラッシュ (\) をエスケープしておきます。

file_path = r"C:\Users\blogcat\mycode.ipynb"

後述する os.path.join() を使えば、OS に合わせたパスを組み立てることができます。

パスの取得や操作に用いる関数

os.getcwd()

 os.getcwd() は作業フォルダ (カレントディレクトリ) の絶対パスを取得します。

# PYTHON_OS_GETCWD

# In[1]

import os

# 作業フォルダを取得
folder_name = os.getcwd()

print(folder_name)
# C:\Users\blogcat

os.path.abspath()

os.path.abspath() に文字列を渡すと、作業フォルダの絶対パスに文字列を連結したパスを生成します。

# PYTHON_OS_PATH_ABSPATH

# In[1]

from os import path

# 作業フォルダの下に"mybook"を連結したパスを生成
p = path.abspath("mybook")

print(p)
# C:\Users\blogcat\mybook

os.path.join()

os.path.join() に複数の文字列を渡すと、実行中の OS の区切り文字を使ってパスを組み立てます。

# PYTHON_OS_PATH_JOIN

# In[1]

from os import path

# 使用中のOSに合わせてパスを組み立てる
p = path.join("C:", "Users", "blogcat", "mycode.ipynb")
print(p)
# C:Users\blogcat\mycode.ipynb

ファイル名やフォルダ名のリストを作って os.path.join() に渡すこともできます。その場合は引数の先頭にアスタリスク (*) を付けます。

# In[2]

name_list = ["C:", "Users", "blogcat", "mycode.ipynb"]

# 使用中のOSに合わせてパスを組み立てる
p = path.join(*name_list)

print(p)
# C:Users\blogcat\mycode.ipynb

コメント

  1. HNaito より:

    下記は誤植と思われますので、ご確認ください。
    「絶対パス」の説明で、バックスラッシュで表し、→ スラッシュで表し、
    「相対パス」の説明で、.blogcat/mycode.ipynb → ./blogcat/mycode.ipynb

  2. あとりえこばと より:

    【ChatGPT解説】os.path.join

    講師: こんにちは!今日はPythonのos.path.joinについてお話しましょう。os.path.joinは、ファイルパスを作成するための関数です。

    生徒: ファイルパスって、ファイルの場所を指定するものですよね?

    講師: その通りです!ファイルパスは、ファイルが保存されている場所を示すために使用されます。os.path.joinは、複数のディレクトリ名やファイル名の要素を結合して、有効なファイルパスを作成するのに便利な関数なんです。

    生徒: なるほど、複数の要素を結合して有効なファイルパスを作るんですね。

    講師: そうです!os.path.joinを使うことで、異なるオペレーティングシステム(Windows、Mac、Linuxなど)で動作するコードを書く際に、適切なファイルパスの表現を自動的に行うことができます。

    生徒: それは便利ですね!具体的な使い方を教えていただけますか?

    講師: もちろんです。例を挙げて説明しましょう。たとえば、次のようなコードがあったとします。
    ◆◆◆◆◆
    import os
    base_dir = ‘/Users/user1’
    file_name = ‘data.txt’
    file_path = os.path.join(base_dir, file_name)
    print(file_path)
    ◆◆◆◆◆
    このコードでは、base_dirとfile_nameの2つの要素をos.path.joinで結合して、有効なファイルパスを作成しています。

    生徒: なるほど、base_dirとfile_nameを結合してfile_pathに格納しているんですね。

    講師: その通りです。os.path.joinは、結合する要素の数に制限はなく、複数のディレクトリ名やファイル名を一度に結合することもできます。

    生徒: 分かりました!os.path.joinを使うことで、ファイルパスの作成を簡単に行うことができるんですね。

    講師: 正解です!os.path.joinは、ファイルパスの作成をシステムに依存せずに行うことができる便利な関数です。異なるオペレーティングシステム間でコードを移植する場合や、柔軟なファイルパスの操作に役立ちます。