我有一个储存与缩进/空格中源会计师树解析层次:如何基于与蟒蛇缩进
Income
Revenue
IAP
Ads
Other-Income
Expenses
Developers
In-house
Contractors
Advertising
Other Expenses
有水平的固定号码,所以我想扁平化层次结构,通过使用3个字段(实际数据具有6个级别,简化例如):
for rownum in range(6,ws.max_row+1):
accountName = str(ws.cell(row=rownum,column=1).value)
indent = len(accountName) - len(accountName.lstrip(' '))
if indent == 0:
l1 = accountName
l2 = ''
l3 = ''
elif indent == 3:
l2 = accountName
l3 = ''
else:
l3 = accountName
w.writerow([l1,l2,l3])
:
L1 L2 L3
Income
Income Revenue
Income Revenue IAP
Income Revenue Ads
Income Other-Income
Expenses Developers In-house
... etc
我可以通过检查之前的帐户名的空格数要这样做
有没有一种更灵活的方式来实现这一点,基于当前行的缩进与前一行相比,而不是假设它每个级别总是3个空格? L1
将始终没有缩进,并且我们可以相信较低的级别会比其父级进一步缩进,但每个级别可能不总是3个空格。
更新,最终以此作为逻辑的肉,因为我最终希望拥有内容的帐户列表,似乎最简单的方法是使用缩进来决定是重置,追加还是弹出列表:
if indent == 0:
accountList = []
accountList.append((indent,accountName))
elif indent > prev_indent:
accountList.append((indent,accountName))
elif indent <= prev_indent:
max_indent = int(max(accountList,key=itemgetter(0))[0])
while max_indent >= indent:
accountList.pop()
max_indent = int(max(accountList,key=itemgetter(0))[0])
accountList.append((indent,accountName))
所以在输出的每一行accountList都是完整的。
感谢这个,我最终希望能够输出在与行的内容沿每一行的层次,所以我稍作修改,但这让我朝着正确的方向前进。 –