python中的路径操作

2024-04-26 19:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我到处都看到了堆栈溢出,但我找不到解决这个问题的方法。在

假设我有一个文件夹/文件作为字符串:"/path1/path2/path3/file"如何获得父文件夹及其父文件夹。换句话说,如果我想向上遍历一个级别"/path1/path2/path3"或两个级别"/path1/path2",如何从python中的原始字符串路径获取这些字符串值?在

请注意,我并不只是想要路径的片段(换句话说,不是['path1', 'path2', 'path3']的列表),而是{}。在


Tags: 文件方法字符串路径文件夹列表堆栈级别
3条回答

os.path.dirname()doc)是正确的选择。它返回包含路径指向的对象的目录:

>>> import os.path
>>> os.path.dirname('/path1/path2/path3/file')
'/path1/path2/path3'

在本例中,您需要“祖父母”目录,因此只需使用函数两次:

^{pr2}$

如果要执行任意次数的操作,则函数可以在以下情况下使用:

def go_up(path, n):
    for i in range(n):
        path = os.path.dirname(path)

    return path

以下是一些示例:

>>> go_up('/path1/path2/path3/file', 1)
'/path1/path2/path3'
>>> go_up('/path1/path2/path3/file', 2)
'/path1/path2'
>>> go_up('/path1/path2/path3/file', 3)
'/path1'

您可以使用^{}模块:

>>> path = pathlib.PurePath('/file1/file2/file3/file')
>>> path.parts
('/', 'file1', 'file2', 'file3', 'file')
>>> os.path.join(*path.parts[:-2])
'/file1/file2'

所以只要把path.parts[:-n]n级别调高。在

或者,您可以使用^{}属性:

^{pr2}$

所以要想提升n级别,只需使用parents[n-1]。在

要将*Path对象转换为字符串,只需对其调用str

>>> str(path)
'/file1/file2/file3/file4/file5/file6'

除了所有其他答案之外,您还可以将os.path.join函数与os.path.pardir变量一起使用,该变量通常等于..。在

>>> path = "some/random/path/to/process"
>>> parent = os.path.pardir
>>> grand_parent_path = os.path.join(path, parent, parent)
>>> grand_parent_path
'some/random/path/to/process\\..\\..'

如果不想重复parent多次,可以使用多重列表:

^{pr2}$

结果非常难看,因此可以使用os.path.normpath函数使其更漂亮:

>>> os.path.normpath(os.path.join(path, *([parent] * 3)))
'some\\random'

重要提示:这样做,您可以确保代码是可移植的

相关问题 更多 >