使用 pathlib 获取主目录

新手上路,请多包涵

查看 Python 3.4 中新的 pathlib 模块,我注意到没有任何简单的方法可以获取用户的主目录。我能想到的获取用户主目录的唯一方法是使用旧的 os.path lib,如下所示:

 import pathlib
from os import path
p = pathlib.Path(path.expanduser("~"))

这看起来很笨重。有没有更好的办法?

原文由 Alex Bliskovsky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 462
2 个回答

似乎是在 此处 的错误报告中提出了此方法。编写了一些代码( 在此处 给出),但不幸的是,它似乎没有进入最终的 Python 3.4 版本。

顺便说一下,所提出的代码与您在问题中使用的代码非常相似:

 # As a method of a Path object
def expanduser(self):
    """ Return a new path with expanded ~ and ~user constructs
    (as returned by os.path.expanduser)
    """
    return self.__class__(os.path.expanduser(str(self)))

编辑

这是一个基本的子类版本 PathTest 子类 WindowsPath (我在 Windows 机器上,但你可以用 PosixPath 替换它)。它根据错误报告中提交的代码添加了 classmethod

 from pathlib import WindowsPath
import os.path

class PathTest(WindowsPath):

    def __new__(cls, *args, **kwargs):
        return super(PathTest, cls).__new__(cls, *args, **kwargs)

    @classmethod
    def expanduser(cls):
        """ Return a new path with expanded ~ and ~user constructs
        (as returned by os.path.expanduser)
        """
        return cls(os.path.expanduser('~'))

p = PathTest('C:/')
print(p) # 'C:/'

q = PathTest.expanduser()
print(q) # C:\Users\Username

原文由 Ffisegydd 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 python-3.5 开始,有 pathlib.Path.home() ,这在一定程度上改善了这种情况。

Windows 上的结果是

>>>pathlib.Path.home()
WindowsPath('C:/Users/username')

在 Linux 上

>>>pathlib.Path.home()
PosixPath('/home/username')

原文由 simon 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题