2017-05-30 6 views
0

Edit: Ich denke, das Problem hat mit leeren Zeilen im Körper der CSV-Datei zu tun. Ich habe eine Reihe von Korrekturen versucht, aber ohne Erfolg. Es ist frustrierend, weil dieser Code ursprünglich funktioniert. Ich bin dankbar, wenn jemand Ideen hat, damit ich mit meinem Leben weitermachen kann.Index Fehlerliste außerhalb des Bereichs

Ich hatte diesen Code funktioniert. Es würde aus einer CSV-Datei eingeben und die spezifischen Spalten in eine Textdatei ausgeben. Ich habe versucht, es nur drucken die Zeile, wenn row[32] Text enthalten. Seit ich damit angefangen habe, es funktioniert überhaupt nicht.

Es gibt mir jetzt den Fehler Index error: list out of range. Die CSV-Datei enthält zahlreiche Spalten und Zeilen, so dass es definitiv nicht außerhalb des Bereichs liegt. Ich bin so irritiert, dass ich das Holz von den Bäumen nicht mehr sehen kann. Ich könnte es total vermasselt haben oder es könnte einfach etwas Kleines sein.

import csv 
import os 

with open("raw.csv", "r") as f, open("txtfile.txt", "w") as output: 
    r = csv.reader(f) 
    for row in r: 
     output.write("{} --- {} --- {}\n".format(row[4], row[1], row[6])) 

with open("txtfile.txt", "w") as output: 
    output.write(str(r)+"\r\n") 
    print("Written successfully") 

with open("raw.csv", "r") as f, open("txtfile.txt", "w") as output: 
    r = csv.reader(f) 
    for row in r: 
     if "Active" in row[0] and "Text1"in row[1] or "Text2" in row[1] or "Burglary" in row[1]: 
      output.write("{} - {} - {}\n".format(row[4], row[6], row[1]) 
+0

enthält, wenn mit' row [] ', wird der Wert innerhalb der' [] 'bezieht sich auf eine Spaltenüberschrift. So' Reihe [6] 'druckt die Werte für jede Reihe in Spalte 6, nicht die Werte der 6. Reihe in Ihrer Datei. –

+0

Das war, was ich dachte, und dieser Teil funktionierte vor ein paar Tagen – nodramas2011

Antwort

0

Ich schließlich behoben das Problem. Es hatte mit Leerzeilen zu tun, also fügte ich der if-Anweisung die Wörter "in Zeile und Zeile []" hinzu. Dies hatte den Effekt, Leerzeilen zu ignorieren und mir dadurch keinen Indexfehler zu geben. Hinzufügen „und der Reihe [32] gewährleistet, es werden nur die Zeilen gedruckt, wo row [32] text

with open("test.csv", "r") as f, open("cops.txt", "w") as output: 
    r = csv.reader(f) 
    for row in r: 
     if "Active" in row and row[0] and row[32]:  
      output.write("{} - {} - {}".format(row[4], row[1], row[6]) 
      + " {} \n \n".format(row[19]) + " {} \n \n".format(row[32]) + " 
      {}\n\n".format(row[13]) + "\n\n") 
Verwandte Themen