<p>首先,您希望清除不必要的空白,因此您需要列出包含空白以外的所有行的列表,并为主循环设置所有的默认值。在</p>
<pre><code>teststring = [line for line in teststring.split('\n') if line.strip()]
currentTab = 0
currentList = []
result = [currentList]
</code></pre>
<p>此方法响应列表的可变性,因此将<code>currentList</code>设置为空列表,然后将<code>result</code>设置为{<cd3>}是一个重要的步骤,因为我们现在可以附加到{<cd1>}。在</p>
^{pr2}$
<p>这是我能想到的检查每行开头是否有制表符的最好方法。还有,是的,你会注意到我实际上检查了空格,而不是制表符。标签100%不起作用,我想是因为我用了更换因为我没有安装Python3。它在Python2.7上运行得非常好,但是我不会把我还没有验证过的代码放进去。如果您确认使用<code>\t</code>并删除<code>tabCount /= 8</code>会产生所需的结果,那么我可以编辑它。在</p>
<p>现在,检查行的缩进程度。如果它与我们的<code>currentTab</code>值相同,那么只需附加到<code>currentList</code>之后。在</p>
<pre><code> if tabCount == currentTab:
currentList.append(line.strip())
</code></pre>
<p>如果它更高,那就意味着我们进入了更深层次的列表层次。我们需要一个嵌套在<code>currentList</code>中的新列表。在</p>
<pre><code> elif tabCount > currentTab:
newList = [line.strip()]
currentList.append(newList)
currentList = newList
</code></pre>
<p>向后走比较困难,因为数据只包含3个嵌套级别,我选择硬编码如何处理值0和1(2应该总是产生上述块之一)。如果没有选项卡,我们可以在<code>result</code>上追加一个新列表。在</p>
<pre><code> elif tabCount == 0:
currentList = [line.strip()]
result.append(currentList)
</code></pre>
<p>对于一个单标签的深标题,基本上是相同的,除了你应该附加到<code>result[-1]</code>,因为这是最后一个要嵌套的主标题。在</p>
<pre><code> elif tabCount == 1:
currentList = [line.strip()]
result[-1].append(currentList)
</code></pre>
<p>最后,确保<code>currentTab</code>更新为当前的<code>tabCount</code>,这样下一次迭代就可以正常运行了。在</p>
<pre><code> currentTab = tabCount
</code></pre>