str.split() 在返回的 List 中包含空元素

问题描述 投票:0回答:4

我正在尝试使用 split() 函数将路径名称拆分为由“/”分隔的标记。

示例:

path = "/a/b///c/../d/.//f"
list = path.split('/')

我预计输出列表是

['a', 'b', 'c', '..', 'd', '.', 'f']
,但实际输出是
['', 'a', 'b', '', '', 'c', '..', 'd', '.', '', 'f']

为什么返回的列表中有空元素?谢谢您的帮助。

python string split
4个回答
2
投票

要解析问题中的路径字符串,我建议使用

PurePath
:

from pathlib import PurePath

path = "/a/b///c/../d/.//f"

print(PurePath(path).parts)

打印:

('/', 'a', 'b', 'c', '..', 'd', 'f')

如果之后需要,您可以检查/删除前导

/


0
投票

您也可以尝试以下方法:

path = '/a/b///c/../d/.//f'
list = path.split('/')
newList = [p for p in list if p != ''] 

输出应该是

['a', 'b', 'c', '..', 'd', '.', 'f']


0
投票

要达到预期的输出,可以使用 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)将其拆分.


0
投票

使用正则表达式分割将是最干净的方法......

import re

re.split(r'\/+', path)

正则表达式匹配一个或多个正斜杠。

© www.soinside.com 2019 - 2024. All rights reserved.