Як отримати домашній каталог у Python?


934

Мені потрібно отримати розташування домашнього каталогу поточного зареєстрованого користувача. В даний час я використовую наступне в Linux:

os.getenv("HOME")

Однак це не працює в Windows. Який правильний крос-платформний спосіб це зробити?


2
Це позначено як дублікат Як знайти справжній домашній каталог користувача за допомогою python , але я проголосував за повторне відкриття, оскільки ця відповідь працює на Python 3, а старіша відповідь - ні.
Dour High Arch

Відповіді:


1677

Ви хочете використовувати os.path.expanduser .
Це забезпечить роботу на всіх платформах:

from os.path import expanduser
home = expanduser("~")

Якщо ви використовуєте Python 3.5+, ви можете використовувати pathlib.Path.home () :

from pathlib import Path
home = str(Path.home())

48
слід зазначити, що якщо користувач увійшов у домен на Windows і має домашню папку профілю, встановлену в активному каталозі, тоді це повідомлятиме, що відображена мережева папка замість локальної домашньої директорії
скайп

7
pathlib.Path.home()Доступний з Python3.5 року ( docs.python.org/3/library/pathlib.html#pathlib.Path.home )
Ivan De Paz Centeno

9
Цікаво, чому ніхто інший не згадував про це у цьому питанні, але якщо вам потрібно знати, де знаходиться домашній каталог іншого користувача, ви можете використовувати його os.path.expanduser('~username'). Можливо, це стосується лише Linux.
Макс

2
@Dipayan ні, це бекпорт Python 2 pathlib. Для Python 3 pathlib правильний.
Стіг

2
Результат однаковий. Якщо ви зазвичай працюєте з pathlib, ви можете віддати перевагу рішенням pathlib (і опустити заклик str). Якщо ви просто хочете, щоб шлях був у вигляді рядка, вони обидва роблять те саме.
Ніклас Мерч

-19

Ось Linux-спосіб cd .. якщо вам потрібно використовувати це, замість цього зверніть увагу: (якщо ви перебуваєте в підкаталозі, він перейде в каталог)


4
Це змінює попередній каталог. Можливо, ви дивитесь не на те питання?
TheTechRobo36414519

1
Я думаю, що OP шукає щось для роботи у сценарії python, і ця команда буде надходити до батьківського каталогу cwd, який може не бути домашнім директорією користувачів.
Бенджамін Гудакре

Я розумію, що це відповідає на неправильне питання, але це велика кількість голосів проти - до нового плаката, не менше ...
rodrigo-silveira
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.