Ich versuche, ein Python 2.7 Skript zu schreiben, um durch eine Konfigurationsdatei zu analysieren. Die Konfigurationsdatei hat Standardeinstellungen, aber nicht alle Einstellungen sind ausgefüllt. Ich konnte die Werte für einen einzelnen Abschnitt extrahieren, aber wenn ich zusätzliche Einträge hinzufügte, schlug meine Skriptlogik fehl. Ich denke, dass ich die Attribute (RuleName, Next) in der Konfigurationsdatei verwenden könnte, um nachzudenken, aber ich kann nicht darüber nachdenken, wie dies zu erreichen ist. Im Folgenden sehen Sie, wie die Konfigurationen aussehen.Python - Parsing-Konfigurationsdatei - Flusskontrolle
Konfigurationsdatei
RuleName "Rule 1"
value1 = "some value"
value2 = "some value"
value3 = "some value"
value4 = "some value"
Next
RuleName = "Rule 2"
value1 = "some value"
value2 = "some value"
value3 = "some value"
Next
RuleName = "Rule 3"
value1 = "some value"
value2 = "some value"
value3 = "some value"
value4 = "some value"
value5 = "some value"
Next
ist die Logik meiner Schrift. Irgendwelche Vorschläge wären hilfreich. Dies ist mein erster Versuch, ein komplexeres Skript mit Python zu schreiben. Ich bin mir sicher, dass es raffiniertere Möglichkeiten gibt, dies zu rechtfertigen, aber ich möchte es relativ einfach halten, während ich Python lerne.
Vielen Dank!
for line in lines:
n = line.lstrip()
if n.find(rulesetting1) != -1:
pos = len(rulesetting1)
rulevalue1 = n[pos:]
elif n.find(rulesetting2) != -1:
pos = len(rulesetting2)
rulevalue2 = n[pos:]
elif n.find(rulesetting3) != -1:
pos = len(rulesetting3)
rulevalue3 = n[pos:]
elif n.find(rulesetting4) != -1:
pos = len(rulesetting4)
rulevalue4 = n[pos:]
elif n.find(rulesetting5) != -1:
pos = len(rulesetting5)
rulevalue5 = n[pos:]
elif n.find("Next") != -1:
Start cycle over?
Was ist mit der Suche nach "Next" und dann den Zyklus zu starten. Irgendwann möchte ich das in eine CSV-Datei schreiben, aber ich muss diesen Fluss zuerst runter bekommen.
Ich denke, dass Sie eine andere Variable benötigen, um den Zustand anzuzeigen, in dem Sie sich befinden. Zum Beispiel vor dem Lesen einer Zeile setzen Sie den Status auf "WAITING_RULE" ', nach" "RuleName" "Zeile lesen, setzen Sie den Status auf" " READING_RULE "'. Nachdem die Zeile "Next" gelesen wurde, setzen Sie den Status erneut zurück. Wenn Sie nur bestimmte Regeln laden möchten, überspringen Sie die Zeilen "RuleName", die Sie nicht möchten. Die Statusvariable bestimmt, ob eine "value =" value "" -Zeile übersprungen werden soll. – Cychih