我正在尝试使用 split() 函数将路径名称拆分为由“/”分隔的标记。
示例:
path = "/a/b///c/../d/.//f"
list = path.split('/')
我预计输出列表是
['a', 'b', 'c', '..', 'd', '.', 'f']
,但实际输出是['', 'a', 'b', '', '', 'c', '..', 'd', '.', '', 'f']
。
为什么返回的列表中有空元素?谢谢您的帮助。
PurePath
:
from pathlib import PurePath
path = "/a/b///c/../d/.//f"
print(PurePath(path).parts)
打印:
('/', 'a', 'b', 'c', '..', 'd', 'f')
如果之后需要,您可以检查/删除前导
/
。
您也可以尝试以下方法:
path = '/a/b///c/../d/.//f'
list = path.split('/')
newList = [p for p in list if p != '']
输出应该是
['a', 'b', 'c', '..', 'd', '.', 'f']
要达到预期的输出,可以使用 os.path.normpath() 函数对路径进行归一化,然后进行分割:
import os
path = "/a/b///c/../d/.//f"
normalized_path = os.path.normpath(path)
path_list = normalized_path.split(os.path.sep)
print(path_list)
这应该会给你想要的输出:
['a', 'b', 'c', '..', 'd', '.', 'f']
os.path.normpath() 函数通过删除“//”和“/../”等冗余元素来简化路径,然后您可以使用特定于平台的路径分隔符(os.path.sep)将其拆分.
使用正则表达式分割将是最干净的方法......
import re
re.split(r'\/+', path)
正则表达式匹配一个或多个正斜杠。