ich einen Rechnungs Baum, die mit Einzügen/Räumen in der Quelle gespeichert sind:Wie Hierarchie analysieren basierend auf Einzüge mit Python
Income
Revenue
IAP
Ads
Other-Income
Expenses
Developers
In-house
Contractors
Advertising
Other Expenses
Es gibt eine feste Anzahl von Ebenen, so würde Ich mag die abzuflachen Hierarchie unter Verwendung von 3 Feldern (ist-Daten 6 Niveaus, beispielsweise vereinfacht):
L1 L2 L3
Income
Income Revenue
Income Revenue IAP
Income Revenue Ads
Income Other-Income
Expenses Developers In-house
... etc
ich kann dies tun, indem die Anzahl der Leerzeichen vor dem Kontonamen überprüft:
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])
Gibt es eine flexiblere Möglichkeit, dies zu erreichen, basierend auf dem Einrücken der aktuellen Zeile im Vergleich zur vorherigen Zeile, anstatt anzunehmen, dass es immer 3 Leerzeichen pro Ebene gibt? L1
wird immer keinen Einzug haben, und wir können darauf vertrauen, dass niedrigere Ebenen weiter eingerückt werden als ihre übergeordneten, aber vielleicht nicht immer 3 Leerzeichen pro Ebene.
Update, endete mit dieser als das Fleisch der Logik, da ich schließlich die Kontenliste mit dem Inhalt wollte, schien es am einfachsten, nur den Einzug zu verwenden, um zu entscheiden, ob die Liste zurücksetzen, anhängen oder Pop:
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))
So ist die accountList in jeder Zeile der Ausgabe abgeschlossen.
Vielen Dank für diese, ich wollte schließlich die Hierarchie in jeder Zeile zusammen mit dem Inhalt der Zeile ausgeben können, so dass ich leicht modifiziert, aber das brachte mich in die richtige Richtung. –