2017-04-13 3 views
0

Ich versuche herauszufinden, wie man die folgende Beispieltextdatei in ein Wörterbuch pro Block liest, wobei der Tag als Schlüssel und der Rest als Wert verwendet wird, aber ich kann es nicht verarbeiten :python3 Textdatei in separate Wörterbücher lesen

Friday 
10:00 - 10:30 Debrief 
10:30 - 13:00 Track running 
13:00 - 14:00 Lunch 
14:00 - 18:00 Track running 
18:00   End 

Saturday 
10:00 - 10:30 Debrief 
10:30 - 13:00 Track running 
13:00 - 14:00 Lunch 
14:00 - 18:00 Track running 
18:00   End 

Sunday 
10:00 - 10:30 Debrief 
10:30 - 13:00 Track running 
13:00 - 14:00 Lunch 
14:00 - 18:00 Track running 
18:00   End 

Dies sollte 3 Wörterbücher mit Schlüsseln Freitag, Samstag und Sonntag, der Rest jedes Blocks sollte der Wert der Schlüssel sein.

Dies ist, was ich begonnen habe zu tun, aber ich bin fest, wie man den Text aus der Textdatei als Wörterbuch Schlüssel plus das sieht wirklich umständlich, gibt es eine einfache Möglichkeit, dies zu tun oder bin ich auf der geraden Linien ohnehin ?:

def schedule(): 
    flag = False 
    with open("example.txt", 'r') as f: 
     for line in f: 
      if len(line.strip()) == 0: 
       flag = True 
      elif flag: 
       # somehow use the day of the week to 
       # become the dictionary key 
       flag = False 
      else: 
       # somehow use the rest of the block of text as the value 

es tut mir leid ich habe keine funktionierende Code

Antwort

0

Gut, das ist ein Beispiel, das ich schnell warf, offensichtlich der Code verbessert werden kann, erstellt es ein Wörterbuch mit den Tasten der Tageswoche, und jeder Tag hat eine Liste von jeder Aufgabe im Zeitplan.

def schedule(): 
flag = False 
schedule = dict() 
days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
       "Saturday", "Sunday"] 

with open("example.txt", 'r') as f: 
    for line in f: 
     line_items = line.split() 
     if line_items and line_items[0] in days_of_week: 
      schedule[line_items[0]] = list() 
      current_day = line_items[0] 
     else: 
      if line_items and current_day: 
       schedule[current_day].append(line_items) 

return schedule 

Dies würde zu:

{'Sunday': [['10:00', '-', '10:30', 'Debrief'], ['10:30', '-', '13:00', 'Track', 'running'], ['13:00', '-', '14:00', 'Lunch'], ['14:00', '-', '18:00', 'Track', 'running'], ['18:00', 'End']], 'Friday': [['10:00', '-', '10:30', 'Debrief'], ['10:30', '-', '13:00', 'Track', 'running'], ['13:00', '-', '14:00', 'Lunch'], ['14:00', '-', '18:00', 'Track', 'running'], ['18:00', 'End']], 'Saturday': [['10:00', '-', '10:30', 'Debrief'], ['10:30', '-', '13:00', 'Track', 'running'], ['13:00', '-', '14:00', 'Lunch'], ['14:00', '-', '18:00', 'Track', 'running'], ['18:00', 'End']]} 
0

ich einen ähnlichen Ansatz hatte, was Ilhicas tat im Hinblick auf ein Wörterbuch mit den Tagen der Woche enthält. Ich ging einen Schritt weiter und war in der Lage, eine Reihe der erforderlichen Informationen für den 'Wert' jedes Wörterbucheintrags zu haben.

with open('example.txt', 'r') as f: 
    dictDays = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] 
    lines = f.read().splitlines() #read lines but removes '\n' 
    schDict = {} 
    for text in lines: 
     if text in dictDays: 
      schDict.update({text: ''}) 
      del lines[lines.index(text)] 
    connect = [''] 
    count = 0 
    for text in lines: 
     if text != '': 
      connect[count] += (text + '\n') 
     if text == '': 
      connect.append('') 
      count += 1 
    for txtNum in range(len(connect)): 
     dayKey = list(schDict.keys())[txtNum] 
     schDict.update({dayKey:connect[txtNum]}) 

print(schDict) 

Ich bin auch neu zu Python. Ich arbeite seit ungefähr 2 Monaten damit, also bin ich mir sicher, dass dieser Code-Block etwas aufgeräumt werden könnte, aber er sollte die Tools enthalten, die Sie zur Lösung Ihres Problems benötigen.

+0

Ich kann leider nicht funktionieren, wenn die Liste außerhalb des Bereichs – iFunction

+0

Hmm? Das ist interessant. Ich habe den obigen Code einfach in eine neue .py-Datei in Atom kopiert und eingefügt. Ich habe sichergestellt, dass die open-Funktion auf den korrekten Speicherort der Datei zeigt, und es lief einwandfrei. Dies ist der Output, den ich bekomme: '{'Freitag': '10: 00 - 10:30 Nachbesprechung \ n10: 30 - 13:00 Track läuft \ n13: 00 - 14:00 Mittagessen \ n14: 00 - 18:00 Track running \ n18: 00 Ende \ n ',' Samstag ': '10: 00 - 10:30 Nachbesprechung \ n10: 30 - 13:00 Track läuft \ n13: 00 - 14:00 Mittagessen \ n14: 00 - 18: 00 Track running \ n18: 00' Ich habe die Ausgabe aufgrund von Zeichenbeschränkungen gekürzt, aber Sie bekommen die Idee. –

+0

'Liste außerhalb des Bereichs' tritt auf, wenn Sie versuchen, eine for-Schleife durch eine leere Liste auszuführen. Kopieren Sie den Code von oben und fügen Sie ihn etwas ein? Wenn ich den Code sehe, kann ich helfen, Probleme zu machen. –