Ersetzen der leeren csv-Spalte die Werte mit einer null

So, ich bin den Umgang mit einer csv-Datei, die fehlenden Werte.
Was ich will, mein script ist:

#!/usr/bin/python

import csv
import sys

#1. Place each record of a file in a list.
#2. Iterate thru each element of the list and get its length.
#3. If the length is less than one replace with value x.


reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
    for x in row[:]:
                if len(x)< 1:
                         x = 0
                print x
print row

Hier ist ein Beispiel der Daten, die ich versuchte es auf, es sollte im Idealfall arbeiten in einer beliebigen Spalte Länge

Before:
actnum,col2,col4
xxxxx ,    ,
xxxxx , 845   ,
xxxxx ,    ,545

After
actnum,col2,col4
xxxxx , 0  , 0
xxxxx , 845, 0
xxxxx , 0  ,545

Jede Beratung wäre geschätzt

Update Hier ist, was ich jetzt habe (danke):

reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
    for i, x in enumerate(row):
                if len(x)< 1:
                         x = row[i] = 0
print row

Jedoch, es scheint nur aus setzen einen Datensatz, ich werde umleiten der Ausgabe in eine neue Datei auf der Kommandozeile.

Update 3: Ok jetzt hab ich das gegenteilige problem, ich bin die Ausgabe von Duplikaten der einzelnen Datensätze.
Warum ist das passiert?

After
actnum,col2,col4
actnum,col2,col4
xxxxx , 0  , 0
xxxxx , 0  , 0
xxxxx , 845, 0
xxxxx , 845, 0
xxxxx , 0  ,545
xxxxx , 0  ,545

Ok, ich fixe es (unten) Dank Euch für Eure Hilfe.

#!/usr/bin/python

import csv
import sys

#1. Place each record of a file in a list.
#2. Iterate thru each element of the list and get its length.
#3. If the length is less than one replace with value x.


reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
    for i, x in enumerate(row):
                if len(x)< 1:
                         x = row[i] = 0
    print ','.join(str(x) for x in row)
  • Der Grund, warum Sie drucken nur eine Zeile ist, dass Ihre print-Anweisung ist außerhalb der for-Schleife - Einzug es einmal, und Sie sollten in Ordnung sein.
  • Sie können ersetzen "if len(x) <1:" mit " wenn x.strip():". "" wird zu False ausgewertet, und jeder string-Wert wird evaulate zu Wahren (einschließlich Leerzeichen).
  • In Ihrem update entfernt man den print - Anweisung innerhalb der Schleife, wo Sie wirklich wollte, zu entfernen, die man außerhalb der Schleife. Möglicherweise möchten Sie auch zu Streifen Ihres strings, wie pro meine Antwort unten.
InformationsquelleAutor homerjay | 2010-05-19
Schreibe einen Kommentar