In [1]: def PathSplit(s):
...: split_len = len(s.split('/'))
...: yield s
...: if split_len > 1:
...: while split_len > 1:
...: splitter = s.split('/', 1)[1]
...: yield splitter
...: s = splitter
...: split_len = len(s.split('/'))
...:
...:
In [2]: for i in PathSplit('home/tom/cat'):
...: print i
...:
...:
home/tom/cat
tom/cat
cat
In [3]: for i in PathSplit('home/tom/cat/another/long/dir'):
...: print i
...:
...:
home/tom/cat/another/long/dir
tom/cat/another/long/dir
cat/another/long/dir
another/long/dir
long/dir
dir
import os
def split_path(s):
while os.sep in s:
rv, s = s.split(os.sep, 1)
yield s
for split in split_path("home/tom/cat"):
print(split)
# prints
tom/cat
cat
8条答案
按热度按时间ars1skjm1#
这是你要找的吗
您可能还希望在
os.path.sep
上进行拆分,以实现跨平台兼容eoigrqb62#
这是你要找的吗?假设你的弦看起来像那样(即没有前导斜线),你可以尝试一个生成器。请注意,这与上面的输出不匹配,因为我不确定为什么第一次传递会返回
tom/cat
,而第二次传递会返回/cat
(前面有斜杠)。你可以修改这个以产生一个'default'(如/
),如果这是你想要的。如果你的字符串将包括一个前导/
,你可以通过从分割中剥离空元素来调整:z9zf31ra3#
az31mfrm4#
比在'/'上拆分更安全的方法:
gxwragnw5#
这将剪切字符串中的第一个目录:
它将字符串拆分成一个dir数组,然后将除第一个目录之外的所有目录再次连接在一起。
hk8txs486#
您可以拆分并重新加入os模块:
dfddblmv7#
我可能会使用类似这样的代码来获取每一步的输出:
7jmck4yq8#
这是一个我在其他地方没有看到的简单答案:
Split可以在第一次拆分时拆分字符串。