ユーザーのホームディレクトリを取得するには os.path.expanduser() や pathlib.Path.home() を使う。
import os
home = os.path.expanduser('~')
print(home) # /home/username(Linux/Mac)または C:\Users\username(Windows)
~ はホームディレクトリを表すシェルの記法で、expanduser() がこれを実際のパスに展開する。
pathlib を使う方法
pathlib では Path.home() クラスメソッドでホームディレクトリを取得できる。
from pathlib import Path
home = Path.home()
print(home) # /home/username
ホームディレクトリ内のファイルへのパスを構築するには、/ 演算子で結合する。
from pathlib import Path
config_file = Path.home() / '.config' / 'myapp' / 'settings.json'
print(config_file) # /home/username/.config/myapp/settings.json
~ を含むパスを展開する
パス文字列に ~ が含まれている場合、expanduser() で展開する必要がある。
import os
path = '~/documents/data.txt'
expanded = os.path.expanduser(path)
print(expanded) # /home/username/documents/data.txt
pathlib でも expanduser() メソッドで同じことができる。
from pathlib import Path
path = Path('~/documents/data.txt')
expanded = path.expanduser()
print(expanded) # /home/username/documents/data.txt
他のユーザーのホームディレクトリを取得する
~username の形式で他のユーザーのホームディレクトリを取得できる(Unix系のみ)。
import os
other_home = os.path.expanduser('~otheruser')
print(other_home) # /home/otheruser
環境変数からホームディレクトリを取得する
os.environ を使って環境変数から直接取得することもできる。
import os
# Unix系
home = os.environ.get('HOME')
# Windows
home = os.environ.get('USERPROFILE')
ただし、クロスプラットフォームで動作させるには Path.home() や expanduser() を使う方が確実だ。