2016-10-20 25 views
0

Ich habe hier einige Python-Code mit dem Ziel, Benutzereingaben zu treffen, um eine bestimmte Zeile einer CSV und dann zu überschreiben, wenn ein bestimmter Buchstabe übereinstimmt.Python spezifische Zeile und Spalte der CSV-Datei bearbeiten

Dieser Code funktioniert fast so, wie ich es möchte, aber es ist nicht in der Lage, eine andere Zeile als die erste zu bearbeiten. Ein Beispiel für die Ausgabe dieser Code:

red,12.95,2,b #note, this change from 'a' to 'b' 
blue,42.5,3,a #How can I target this row and change it? 
green,40.0,1,a 

das Problem ich es dann eine weitere Zeile wie Zeile ‚blue, 42,5, a‘ Targeting. Mein Code kann nicht zielen und ändert dann den Wert "a" in "b".

Antwort

1

Sie iterieren auf line und Sie ändern title. Tun Sie dies:

for line in reader: 
    if len(line)>3 and line[3] == 'a': 
     line_count += 1 
     if marked_item == line_count: 
      line[3] = 'b' 
    lines.append(line) 

und legen Sie die title = next(reader) da Sie keinen Titel haben.

voll fester Code für die Eingabe CSVs, die eine Titelzeile nicht hat:

import csv 

line_count = 0 
marked_item = int(input("Enter the item number:")) 
with open("items.csv", 'r') as f: 
    reader = csv.reader(f, delimiter=',') 

    lines = [] 
    for line in reader: 
     if len(line)>3 and line[3] == 'a': 
      line_count += 1 
      if marked_item == line_count: 
       line[3] = 'b' 
     lines.append(line) 
with open("items.csv", 'w', newline='') as f: 
    writer = csv.writer(f, delimiter=',') 
    writer.writerow(title) 
    writer.writerows(lines) 
+0

habe ich versucht, dies zu tun ursprünglich aber ich bekomme diese Fehlermeldung: ‚Wenn Zeile [3] ==‚r‘: IndexError: Listenindex außerhalb des Bereichs ' –

+0

Beachten Sie, dass das' r 'in' wenn Zeile [3] == 'r' '. Ich habe meinen Code so geändert, dass "r" anstelle von "a" angezeigt wird. –

+0

Sie müssen leere Zeilen haben. Ich habe eine Längenprüfung für die Zeile hinzugefügt. –

Verwandte Themen