os.path.join 是否有 Pathlib 替代品?
Is there a Pathlib alternate for os.path.join?
我目前正在使用 Pathlib
访问我的文件的父目录,如下所示:
Path(__file__).parent
当我打印它时,得到以下输出:
print('Parent: ', Path(__file__).parent)
#output
/home/user/EC/main-folder
main-folder
有一个我想访问的 .env
文件,为此我想将父路径与 .env
一起加入。现在,我做了:
dotenv_path = os.path.join(Path(__file__).parent, ".env")
有效。但我想知道,是否有 Pathlib
替代 os.path.join()
?
类似于:
dotenv_path = pathlib_alternate_for_join(Path(__file__).parent, ".env")
是的,有:
env_path = Path(__file__).parent / ".env"
/
就是您所需要的。这将适用于不同的操作系统
你可以这样使用:
(Path(__file__).parent).joinpath('.env')
文档:
filepath
的以下定义在精神上更接近 os.path.join 吗?
import pathlib
main_dir = 'my_main_dir'
sub_dir = 'sub_dir'
fname = 'filename.tsv'
filepath = pathlib.PurePath(main_dir, sub_dir, fname)
您可以简单地连接 Path 对象和字符串:
import pathlib
script_parent_path = pathlib.Path(__file__).parent
my_dir = ".env"
my_new_path = pathlib.Path(script_parent_path, my_dir)
print(my_new_path)
那是因为:
Pathlib's constructors accept pathsegments. Each element of pathsegments can be either a string representing a path segment, an object implementing the os.PathLike interface which returns a string, or another path object - https://docs.python.org/3/library/pathlib.html#pathlib.PurePath
仅供想知道 /
在 pathlib.Path
内部如何工作的人:
# this is where the magic begins! (overload the '/' operator)
def __truediv__(self, key):
try:
return self._make_child((key,))
except TypeError:
return NotImplemented
def _make_child(self, args):
drv, root, parts = self._parse_args(args)
drv, root, parts = self._flavour.join_parsed_parts(
self._drv, self._root, self._parts, drv, root, parts)
return self._from_parsed_parts(drv, root, parts)
@classmethod
def _from_parsed_parts(cls, drv, root, parts):
self = object.__new__(cls)
self._drv = drv
self._root = root
self._parts = parts
return self # finally return 'self', which is a Path object.
我认为加入路径最简单的方法是使用
Path(Path(__file__).parent,".env")
另见 definition of pathlib.Path(*pathsegments)
。
在文档中,为 PurePath 提供了以下语句和示例:
When several absolute paths are given, the last is taken as an anchor
(mimicking os.path.join()’s behaviour):
>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')
>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')
我目前正在使用 Pathlib
访问我的文件的父目录,如下所示:
Path(__file__).parent
当我打印它时,得到以下输出:
print('Parent: ', Path(__file__).parent)
#output
/home/user/EC/main-folder
main-folder
有一个我想访问的 .env
文件,为此我想将父路径与 .env
一起加入。现在,我做了:
dotenv_path = os.path.join(Path(__file__).parent, ".env")
有效。但我想知道,是否有 Pathlib
替代 os.path.join()
?
类似于:
dotenv_path = pathlib_alternate_for_join(Path(__file__).parent, ".env")
是的,有:
env_path = Path(__file__).parent / ".env"
/
就是您所需要的。这将适用于不同的操作系统
你可以这样使用:
(Path(__file__).parent).joinpath('.env')
文档:
filepath
的以下定义在精神上更接近 os.path.join 吗?
import pathlib
main_dir = 'my_main_dir'
sub_dir = 'sub_dir'
fname = 'filename.tsv'
filepath = pathlib.PurePath(main_dir, sub_dir, fname)
您可以简单地连接 Path 对象和字符串:
import pathlib
script_parent_path = pathlib.Path(__file__).parent
my_dir = ".env"
my_new_path = pathlib.Path(script_parent_path, my_dir)
print(my_new_path)
那是因为:
Pathlib's constructors accept pathsegments. Each element of pathsegments can be either a string representing a path segment, an object implementing the os.PathLike interface which returns a string, or another path object - https://docs.python.org/3/library/pathlib.html#pathlib.PurePath
仅供想知道 /
在 pathlib.Path
内部如何工作的人:
# this is where the magic begins! (overload the '/' operator)
def __truediv__(self, key):
try:
return self._make_child((key,))
except TypeError:
return NotImplemented
def _make_child(self, args):
drv, root, parts = self._parse_args(args)
drv, root, parts = self._flavour.join_parsed_parts(
self._drv, self._root, self._parts, drv, root, parts)
return self._from_parsed_parts(drv, root, parts)
@classmethod
def _from_parsed_parts(cls, drv, root, parts):
self = object.__new__(cls)
self._drv = drv
self._root = root
self._parts = parts
return self # finally return 'self', which is a Path object.
我认为加入路径最简单的方法是使用
Path(Path(__file__).parent,".env")
另见 definition of pathlib.Path(*pathsegments)
。
在文档中,为 PurePath 提供了以下语句和示例:
When several absolute paths are given, the last is taken as an anchor (mimicking os.path.join()’s behaviour):
>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')
>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')