Python递归分割路径

2024-09-25 12:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个以字符串形式给出的路径分割成子部分,使用“/”作为分隔符,递归地将其传递给元组。例如:“E:/John/2012/practice/question11”应该是('E:','John','2012','practice','question11')。在

所以我把不包括“/”的每个字符都传递到一个元组中,但这并不是我希望子部分的连接方式,如示例所示。这是家庭作业中的一个练习题,希望能在我学习递归的过程中得到帮助。在

非常感谢你


Tags: 字符串路径示例过程方式字符john形式
2条回答

像这样的东西

>>> import os
>>> s = "E:/John/2012/practice/question11"
>>> os.path.split(s)
('E:/John/2012/practice', 'question11')

注意os.path.split()没有像{}那样分割整个路径

^{2}$

编辑:虽然问题是关于Windows路径的。对于unix/linux路径(包括以“/”开头的路径)进行修改非常容易

>>> def rec_split(s):
...     rest, tail = os.path.split(s)
...     if rest in ('', os.path.sep):
...         return tail,
...     return rec_split(rest) + (tail,)

您的错误不在递归中,而是在连接递归结果时所做的操作。假设您已经到达('E:', 'John', '2012', 'prac'),下一个字符是't';您不想将't'追加到递归结果中,而是将其附加到递归结果的最后一个单词。类似地,当您到达一个分隔符时,您希望将新单词初始化为空。在

当你做递归时,你会(几乎)总是有两种情况:递归的和终端的。终端通常很简单,而且你做得很正确(如果没有字符串,就没有单词)。但是我发现如果你试着用一个递归的例子,在上面的计算过程中的某个地方,来精确地计算出需要发生什么,这会有很大的帮助。在

相关问题 更多 >