通过Python 3.4中的新pathlib
模块,我注意到没有任何简单的方法来获取用户的主目录。获取用户主目录的唯一方法是使用较旧的os.path
lib,如下所示:
import pathlib
from os import path
p = pathlib.Path(path.expanduser("~"))
这看起来很笨重。还有更好的方法吗?
答案 0 :(得分:13)
从python-3.5开始,有Path.home()
,这有点改善了这种情况。
答案 1 :(得分:5)
似乎这个方法是在错误报告here中提出的。编写了一些代码(给定here),但不幸的是它似乎没有进入最终的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
答案 2 :(得分:3)
有method expanduser()
:
p = PosixPath('~/films/Monty Python')
p.expanduser()
PosixPath('/home/eric/films/Monty Python')
答案 3 :(得分:0)
对于懒惰阅读的人the comments:
现在有了 pathlib.Path.home
方法。
答案 4 :(得分:-1)
警告:这个答案是3.4具体的。正如其他答案中所指出的,此功能已在更高版本中添加。
看起来没有更好的方法来做到这一点。我刚刚搜索了the documentation,我的搜索字词没有任何相关内容。
~
点击次数为expand
点击次数为user
有1次点击作为Path.owner()
relative
有8个匹配,主要与PurePath.relative_to()