Как получить домашний каталог в Python?

Мне нужно узнать местоположение домашнего каталога текущего вошедшего в систему пользователя. В настоящее время в Linux я использую следующее:

os.getenv("HOME")

Однако в Windows это не работает. Каков правильный кроссплатформенный способ сделать это?


person Nathan Osman    schedule 26.10.2010    source источник
comment
Это помечено как дубликат Как найти реальный домашний каталог пользователя с помощью python, но я проголосовал за повторное открытие, потому что этот ответ работает на Python 3 и более старый ответ - нет.   -  person Dour High Arch    schedule 17.06.2020
comment
Заголовок вопроса следует улучшить, чтобы задать вопрос Каков правильный кроссплатформенный способ получить домашний каталог в Python?   -  person Rich Lysakowski PhD    schedule 11.04.2021


Ответы (3)


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

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

Если вы используете Python 3.5+, вы можете использовать pathlib.Path.home ():

from pathlib import Path
home = str(Path.home())
person dcolish    schedule 26.10.2010
comment
Следует отметить, что если пользователь вошел в домен в Windows и его домашняя папка профиля установлена ​​в активном каталоге, то это будет сообщать, что подключенная сетевая папка вместо локального домашнего каталога - person scape; 17.12.2012
comment
Если кому-то нужен просто домашний каталог, а не каталог пользователя, вы можете попробовать найти каталог пользователя (ud) и сделать следующее: hd=os.sep.join(ud.split(os.sep)[:-1]) - person Brōtsyorfuzthrāx; 28.10.2016
comment
У меня есть приложение CLI, работающее под sudo, и оно использует домашний каталог root вместо sudoer. Решение здесь: stackoverflow.com/questions/5721529/ - person Preston Badeer; 10.01.2017
comment
pathlib.Path.home() доступен начиная с Python3.5 (docs.python. org / 3 / library / pathlib.html # pathlib.Path.home) - person Ivan De Paz Centeno; 04.10.2017
comment
Интересно, почему никто не упомянул об этом в этом вопросе, но если вам нужно знать, где находится домашний каталог другого пользователя, вы можете использовать os.path.expanduser('~username'). Вероятно, применимо только для Linux. - person Max; 28.06.2018
comment
вам нужно импортировать pathlib2 вместо pathlib, чтобы сделать path.home() - person Dipayan; 15.06.2019
comment
@Dipayan нет, это бэкпорт pathlib на Python 2. Для Python 3 правильная pathlib. - person Haystack; 16.07.2019
comment
Как мне решить, какой использовать? - person deed02392; 31.07.2019
comment
Результат тот же. Если вы обычно работаете с pathlib, вы можете предпочесть решение pathlib (и опустите вызов str). Если вам просто нужен путь в виде строки, они оба сделают то же самое. - person Niklas Mertsch; 15.08.2019
comment
@Tessaracter Да, оба решения работают в Windows и Linux. - person MoTSCHIGGE; 13.01.2020
comment
@IvanDePazCenteno начиная с Python3.5, похоже, не продержался очень долго. Не работает с Python 3.8.6. - person UTF-8; 25.11.2020
comment
Вы уверены? Здесь отлично работает с 3.9.5. - person Vampire; 27.05.2021

Я знаю, что это старый поток, но мне недавно он понадобился для крупномасштабного проекта (Python 3.8). Он должен был работать на любой основной ОС, поэтому я выбрал решение, которое @Max написал в комментариях.

Код:

import os
print(os.path.expanduser("~"))

Окна вывода:

PS C:\Python> & C:/Python38/python.exe c:/Python/test.py
C:\Users\mXXXXX

Вывод Linux (Ubuntu):

rxxx@xx:/mnt/c/Python$ python3 test.py
/home/rxxx

Я также тестировал его на Python 2.7.17, и это тоже работает.

person user56700    schedule 10.02.2021
comment
Чем ваш ответ отличается от ответа dcolish? - person The Godfather; 22.04.2021

Я обнаружил, что модуль pathlib также поддерживает это.

from pathlib import Path
>>> Path.home()
WindowsPath('C:/Users/XXX')
person Jaeyoon Jeong    schedule 14.02.2021