2024-04-26 19:14:26 发布
网友
我到处都看到了堆栈溢出,但我找不到解决这个问题的方法。在
假设我有一个文件夹/文件作为字符串:"/path1/path2/path3/file"如何获得父文件夹及其父文件夹。换句话说,如果我想向上遍历一个级别"/path1/path2/path3"或两个级别"/path1/path2",如何从python中的原始字符串路径获取这些字符串值?在
"/path1/path2/path3/file"
"/path1/path2/path3"
"/path1/path2"
请注意,我并不只是想要路径的片段(换句话说,不是['path1', 'path2', 'path3']的列表),而是{}。在
['path1', 'path2', 'path3']
os.path.dirname()(doc)是正确的选择。它返回包含路径指向的对象的目录:
os.path.dirname()
>>> import os.path >>> os.path.dirname('/path1/path2/path3/file') '/path1/path2/path3'
在本例中,您需要“祖父母”目录,因此只需使用函数两次:
如果要执行任意次数的操作,则函数可以在以下情况下使用:
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级别调高。在
path.parts[:-n]
n
或者,您可以使用^{}属性:
所以要想提升n级别,只需使用parents[n-1]。在
parents[n-1]
要将*Path对象转换为字符串,只需对其调用str:
*Path
str
>>> str(path) '/file1/file2/file3/file4/file5/file6'
除了所有其他答案之外,您还可以将os.path.join函数与os.path.pardir变量一起使用,该变量通常等于..。在
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多次,可以使用多重列表:
parent
结果非常难看,因此可以使用os.path.normpath函数使其更漂亮:
>>> os.path.normpath(os.path.join(path, *([parent] * 3))) 'some\\random'
重要提示:这样做,您可以确保代码是可移植的
os.path.dirname()
(doc)是正确的选择。它返回包含路径指向的对象的目录:在本例中,您需要“祖父母”目录,因此只需使用函数两次:
^{pr2}$如果要执行任意次数的操作,则函数可以在以下情况下使用:
以下是一些示例:
您可以使用^{} 模块:
所以只要把
path.parts[:-n]
的n
级别调高。在或者,您可以使用^{} 属性:
^{pr2}$所以要想提升
n
级别,只需使用parents[n-1]
。在要将
*Path
对象转换为字符串,只需对其调用str
:除了所有其他答案之外,您还可以将os.path.join函数与
os.path.pardir
变量一起使用,该变量通常等于..
。在如果不想重复
^{pr2}$parent
多次,可以使用多重列表:结果非常难看,因此可以使用os.path.normpath函数使其更漂亮:
重要提示:这样做,您可以确保代码是可移植的
相关问题 更多 >
编程相关推荐