Dies würde tun. Sie lesen zuerst die Datei und dann eine Schleife pro Zeile. Anschließend erfassen Sie die Daten nach Bedarf. Der wichtige Teil besteht darin, sicherzustellen, dass die Schleife keinen Schlüssel für jede Zeile hinzufügt, sondern nur einen Schlüssel zum Diktat nach einer Unterzeile hinzufügt.
In diesem Code wird davon ausgegangen, dass die Integrität der TXT-Datei in der Reihenfolge korrekt ist. Ich habe diese TXT-Datei für meine Tests verwendet:
mainline1
subline 9
mainline2
subline 8
mainline 3
subline 3
mainline4
mainline5
subline 9
mainline 6
subline 3
Stellen Sie sicher, dass es 1 Mainline und 1 Subline alternativ ist. Es funktioniert nicht, wenn diese Reihenfolge anders ist, da der letzte gefundene Schlüssel gespeichert wird und dieser dann zum Diktat hinzugefügt wird, wenn eine neue Unterzeile gefunden wird. Wenn Sie zum Beispiel main main sub
haben, würde das erste Haupt ignoriert, da das zweite Haupt es ersetzen würde, bevor es eine Chance bekommen würde, hinzugefügt zu werden.
Code:
with open("myfile.txt", 'r') as f: # Open file
file_content = f.read() # Read file
my_dict = {} # Create empty dict to store the data
list_of_lines = file_content.split("\n") # Split the files into a list of lines.
for index, line in enumerate(list_of_lines):
add_to_dict = False
if "mainline" in line:
key = line.replace("mainline", "").strip() # Retrieve the value without the word mainline
if ("mainline" in list_of_lines[index+1] # If next line is also a mainline
or index == len(list_of_lines): # or it's the last line in the file
my_dict[key] = "" # Add the key with an empty value
elif "subline" in line:
value = line.replace("subline", "").strip() # Retrieve the value without the word subline
add_to_dict = True
if add_to_dict: # Only add the key and its value after a subline.
my_dict[key] = value
print(my_dict) # See the result.
>>> {'4': '', '6': '3', '3': '3', '1': '9', '5': '9', '2': '8'}
Was, wenn ich ohne Hauptstrecken Subleitungen? Kann ich ihnen nichts als Wert zuweisen? –
Yup, ich habe den Code aktualisiert. Wir können Enumerate verwenden, um den Index jeder Zeile zu speichern. Dann können wir prüfen, ob der Index + 1 (der nächste Punkt) auch eine Hauptlinie ist. Wenn es nur zum dict mit einem leeren Wert hinzugefügt wird. – Saelyth
Auch scheinen Sie ein neues Mitglied zu Stack Overflow. Willkommen an Bord! Denken Sie daran, dass, wenn eine Antwort für Sie funktioniert, Sie es mit den Steuerelementen auf der linken Seite der Antwort als gültig akzeptieren können ^^ – Saelyth