2017-04-13 15 views
0

次の例のテキストファイルを、日付をキーに、残りを値として使用してブロックごとに辞書に読み込む方法を理解しようとしていますが、うまくいかない:これは、キー金曜日、土曜日、日曜日と3つの辞書を生成する必要がありますpython3別の辞書にテキストファイルを読み込み

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 

、各ブロックの残りの部分は、キーの値である必要があります。

これは私がやったことですが、テキストファイルのテキストを辞書のキーとして使用する方法につきまとっていますが、これは本当に面倒です。これを行う簡単な方法はありますか?とにかく右のライン?:私は、私がどんな作業コード

答えて

0

まあ、これは私がすぐに投げた例があるがないごめんなさい

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 

は、明らかにコードを向上させることができ、それはキーで辞書を作成し、毎日、スケジュール内の各タスクのリストがあります。

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 

これはにつながる:

{'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

私はIlhicasは、曜日を含む辞書を使用しての面で何をしたかと同様のアプローチを持っていました。私はそれをさらに一歩踏み出し、各辞書項目の「価値」について必要な情報の文字列を持つことができました。

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) 

私もPythonの初心者です。私は約2ヶ月間作業していますので、このコードブロックは少しきれいになるかもしれませんが、問題を解決するために必要なツールが含まれているはずです。

+0

残念ながら、リストが範囲外である場合、これを動作させることはできません – iFunction

+0

Hmm?それは興味深い。私はAtomの新しい.pyファイルに上記のコードをコピーして貼り付けました。オープン関数が正しいファイルの場所を指していて、それを正常に実行したことを確認しました。 '{'金曜日:'10:00-10:30デブリーフィング\ n10:30-13:00トラックの実行\ n13:00-14:00ランチ\ n14:00-18:00トラック\ n18:00終了\ n '、'土曜日 ':'10:00-10:30 Debrief \ n10:30-13:00トラックの走行\ n13:00-14:00ランチ\ n14:00-18: 00 Track running \ n18:00' 文字の制限のために出力を短くしましたが、あなたはその考えを得ています。 –

+0

'リストが範囲外です'は、空のリストからforループを実行しようとしているときに発生します。上記のコードをコピーして貼り付けたり、少し修正したりしていますか?私がコードを見ることができれば、私はトラブルシューティングを助けることができます。 –

関連する問題