如何在Python中获取主目录?

Nat*_*man 761 python cross-platform home-directory

我需要获取当前登录用户的主目录的位置.目前,我一直在Linux上使用以下内容:

os.getenv("HOME")
Run Code Online (Sandbox Code Playgroud)

但是,这在Windows上不起作用.什么是正确的跨平台方式?

dco*_*ish 1359

您想使用os.path.expanduser.这将确保它适用于所有平台

from os.path import expanduser
home = expanduser("~")
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Python 3.5+,则可以使用pathlib.Path.home():

from pathlib import Path
home = str(Path.home())
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,如果用户登录到Windows上的域并将其配置文件主文件夹设置在活动目录中,那么这将报告该映射的网络文件夹而不是本地主目录 (39认同)
  • 我想知道为什么没有其他人在这个问题中提到它,但如果你需要知道另一个用户的主目录在哪里,你可以使用`os.path.expanduser('~username')`.可能仅适用于Linux. (7认同)
  • `pathlib.Path.home()`可从Python3.5开始提供(https://docs.python.org/3/library/pathlib.html#pathlib.Path.home) (5认同)
  • @dcolish 请从答案中删除“str()”。使用斜杠“/”构建路径要自然得多,例如“Path.home() /“location_of_a_file.txt”。 (3认同)
  • @Dipayan 不,那是 pathlib 的 Python 2 向后移植。对于 Python 3,pathlib 是正确的。 (2认同)
  • 结果是一样的。如果您通常使用 pathlib,您可能更喜欢 pathlib 解决方案(并省略“str”的调用)。如果您只想将路径作为字符串,它们都会执行相同的操作。 (2认同)

use*_*700 9

我知道这是一个旧线程,但我最近在一个大型项目(Python 3.8)中需要它。它必须适用于任何主流操作系统,因此我采用了@Max 在评论中写的解决方案。

代码:

import os
print(os.path.expanduser("~"))
Run Code Online (Sandbox Code Playgroud)

输出窗口:

PS C:\Python> & C:/Python38/python.exe c:/Python/test.py
C:\Users\mXXXXX
Run Code Online (Sandbox Code Playgroud)

输出 Linux (Ubuntu):

rxxx@xx:/mnt/c/Python$ python3 test.py
/home/rxxx
Run Code Online (Sandbox Code Playgroud)

我还在 Python 2.7.17 上测试了它,它也有效。

  • 你的答案与 dcolish 的答案有何不同? (2认同)

小智 6

我发现 pathlib 模块也支持这一点。

from pathlib import Path
>>> Path.home()
WindowsPath('C:/Users/XXX')
Run Code Online (Sandbox Code Playgroud)


Cha*_*ker 5

这可以使用 来完成pathlib,它是标准库的一部分,并将路径视为具有方法的对象,而不是字符串。

from pathlib import Path

home: str = str(Path('~').expanduser())
Run Code Online (Sandbox Code Playgroud)