1

作为标题中的示例,我想要结果:

目录:home/tom/cat

第一剪:tom/cat

第二次切割:/cat

最后一刀:/

如何在python中做到这一点?

4

8 回答 8

2

这是你要找的:

In [101]: dir = "home/tom/cat"

In [102]: dir.split('/')
Out[102]: ['home', 'tom', 'cat']

您可能还希望拆分os.path.sep为跨平台兼容

于 2012-12-06T18:00:49.850 回答
1
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
于 2012-12-19T14:45:43.743 回答
1

这是你要找的吗?假设您的字符串看起来像那样(即没有前导斜杠),您可以尝试使用生成器。请注意,这与您上面的输出不匹配,因为我不确定为什么第一遍会返回tom/cat但第二遍会返回/cat(斜线在前面)。如果这是您想要的,您可以修改它以在循环完成时产生一个“默认”(例如/) 。while如果您的字符串将包含前导/,您可以通过从拆分中删除空元素来进行调整:

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
于 2012-12-06T18:57:49.740 回答
0

比仅拆分“/”更安全的方法:

In [135]: import os

In [136]: dir = '/home/tom/cat'

In [137]: os.path.basename(dir)
Out[137]: 'cat'
于 2012-12-06T18:04:01.180 回答
0

这会剪切字符串中的第一个目录:

dir = 'home/tom/cat'
parts = dir.split('/')
print '/'.join(parts[1:])

它将字符串拆分为一个目录数组,然后将除第一个之外的所有目录再次连接在一起。删除每个剪切的第一个目录。

于 2012-12-06T18:04:26.463 回答
0

您可以使用 os 模块拆分和重新加入:

import os

def cutPath(path):
    return os.path.join(os.path.split(path)[1:])
于 2012-12-06T18:04:27.583 回答
0

我可能会使用这样的东西来获取每个步骤的输出:

import os

path = "home/tom/cat"
while path:
    base = os.path.basename(path)
    path = path.rstrip(base)

    print base
于 2012-12-06T18:12:34.997 回答
0

这是我在其他地方没有看到的一个干净的答案:

>>> mypath="first/second/third/fourth/fifth.txt"
>>> mypath.split('/',1)
['first', 'second/third/fourth/fifth.txt']
>>> mypath.split('/',1)[1]
'second/third/fourth/fifth.txt'

split 可以在第一次拆分时拆分字符串。

于 2017-11-16T20:33:16.767 回答