2017-11-01 2 views
-2

ich eine Textdatei wie dieses:Konvertieren einer Datei in ein Wörterbuch

line1 =  mainline3 
line2 = subline 9 
line3 = mainline1 
line4 = mainline 9 
line5 =  mainline  7 
line6 = subline  3 

ich diese Datei in einem Wörterbuch so lesen möchten, dass die Linien ‚Hauptstrecke‘ sind der Schlüssel und die Linien mit ‚subline enthalten "der Wert des vorherigen Hauptlinie

Beispiel:

d = {3: 9, 1: '', 9: '', 7: 3} 

Ist es möglich?

Antwort

1

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'} 
+0

Was, wenn ich ohne Hauptstrecken Subleitungen? Kann ich ihnen nichts als Wert zuweisen? –

+1

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

+1

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

Verwandte Themen