2017-02-02 3 views
0

Ich versuche, die Linien in einem Textdokument in ein Array zu spalten, und hängen Attribute zu jedem der Werte in dem Array vor ihnen Umwandeln in JSon in einem anzuzeigenden Text Datei.Listenindex Python außerhalb des zulässigen Bereichs in einer for-Schleife

Doch egal, wie ich meine Codes zwicken, in denen ich immer noch den Fehler „ Indexerror: Listenindex aus rang e“ für die Felder1 [1] Zeile.

with open(fileName,'r') as file: 
    for line in file: 
     if line.startswith('-') and 'section1' in line: 
      for li in file: 
       fields1 = li.split(',') 
       testarr.append({ 
       "section1a": fields1[0], 
       "section1b": fields1[1], 
       "section1c": fields1[2] 
       })  
       with open(test_dir,'a+') as test_file: 
        json.dump(testarr, test_file) 

Irgendeine Idee, wo das Problem liegt?

+0

Können Sie die Eingabedatei Inhalt hier zur Verfügung stellen? –

+0

2011-12-05 11: 30: 00,54321, 12345 Die obige Zeile ist ein Beispiel für die Eingabe. es gibt 3 Spalten also technisch Felder [2] sollte noch arbeiten @SainathBatthala – decemberrobot

+0

Auch habe ich eine Druckanweisung für alle 3 Spalten hinzugefügt, es ist in der Lage, alle 3 Felder zu drucken, aber ich weiß nicht, warum ich nicht in der Lage, es anzuhängen. – decemberrobot

Antwort

2

Sie haben einige seltsame Einrücken und ohne die Inhalte bin ich nicht sicher, wo würden Sie Ihre Fehler, aber das sollte Ihnen helfen, es:

testarr = [] 
with open(fileName,'r') as file: 
    for line in file: 
     if line.startswith('-') and 'section1' in line: 
      fields1 = li.split(',') 
      if len(fields1) >= 3: 
       testarr.append(
        { 
        "section1a": fields1[0], 
        "section1b": fields1[1], 
        "section1c": fields1[2] 
        } 
       ) 
      else: 
       print("This line has an error in it: {}".format(line)) 

with open(test_dir,'a+') as test_file: 
    json.dump(testarr, test_file) 
2

Wenn Sie li.split(',') tun, hat es nicht in 3 Teile aufgeteilt. Vielleicht hat es nicht genug , zu teilen. Zum Beispiel .. li = 'asdf,ffd' Dies wird zu einem Fehler bei fields1 [2] führen, weil es nur in 2 Teile aufgeteilt wird ['asdf', 'ffd'].

Verwandte Themen