2012-03-26 9 views
1

CSV hat Feld, das geparst wird, die möglicherweise Einträge in dem Feld haben, die Werte haben, die zusätzlich durch Komma getrennt sind.Parse CSV und separate Felder mit mehreren Werten

import csv 

def import_text(filename, separator): 
    for line in csv.reader(open(filename), delimiter=separator, 
          skipinitialspace=True): 
     if line[19]: 
      for elt in line[19].split(','): 
       yield elt 


for data in import_text('filename.csv', ','): 
    print (data) 

die Skript Verwendung der obige Spalte 20 in einem CSV wird das folgenden Druck:

a 
b, c, d 
e, f 

I würde stattdessen wie b, c, d; e, f, wie dies auf eigene jeweiligen Linien zu drucken:

a 
b 
c 
d 
e 
f 
+1

Sie könnten mehr klar sein, was Sie versuchen erreichen. Vielleicht suchen Sie nach "für elt in line [19] .split (','):' um Ihre yield-Anweisung – ajwood

+0

Versuchen, die Werte zu erweitern, die in einem Feld durch Kommas getrennt sind. Ihre Antwort versucht, aber die gleichen Ergebnisse erhalten, siehe aktualisierte Frage. – Astron

+1

Können Sie ein kurzes, aber realistisches Beispiel Ihrer Eingabe und (gewünschten) Ausgabe veröffentlichen? Das ABC-Snippet ist überhaupt nicht hilfreich. – georg

Antwort

1

Split die Spalten- und Ertragsfelder individuell:

import csv 

def import_text(filename, separator): 
    for line in csv.reader(open(filename), delimiter=separator, skipinitialspace=True): 
    if line[19]: 
     for elt in line[19].split(separator): 
     yield elt.strip() 

for data in import_text('filename.csv', ','): 
    print (data) 
+0

Ich bin nicht klar, wo 'c.split' in meinem Beispielcode fallen könnte. – Astron

+0

nach der Änderung Ihrer Antwort würde es nicht. Ich bearbeite die komplette Lösung. Der einzige Unterschied besteht darin, dass das vorherige Snippet ohne Änderung passt, während dies Ihren Code verändert. – brice

+0

Das funktioniert, obwohl es ein Leerzeichen vor den Zeilen gibt, die geteilt wurden. Wie würden Sie verhindern, dass der Raum gedruckt wird? – Astron

1
import csv 

def import_text(filename, separator): 
    for line in csv.reader(open(filename), delimiter=separator, skipinitialspace=True): 
     if len(line) > 19: 
      for elt in line[19].split(separator): 
       yield elt 

for data in import_text('filename.csv', ','): 
    print (data) 
Verwandte Themen