2011-08-10 24 views
6

Tengo un archivo "CSV" que utiliza un delimitador de columnas múltiples, por lo que los datos se ve algo comoPueden los archivos de análisis sintáctico de módulos de Python CSV con varias columnas delimitadores

field1_|#|_field2_|#|_field3_|#|_field4 

¿Hay una manera de utilizar el Módulo Python CSV para analizar este archivo?

Gracias

+1

Relacionado: [Cómo utilizar el módulo python csv para dividir datos delimitados por doble tubería] (http://stackoverflow.com/questions/6352409/how-to-use-python-csv-module-for-splitting-double- datos delimitados por la tubería) –

Respuesta

5

tratar de reemplazar el delimitador multichar con el singlechar.

Algo como esto:

class DelimitedFile: 
    def __init__(self, fname, mode='rb', ind=',', outd=','): 
    self.f = open(fname, mode) 
    self.ind = ind 
    self.outd = outd 

    def __iter__(self): 
    return self 

    def next(self): 
    line = self.f.next() 
    return line.replace(self.ind, self.outd) 

usarlo como así:

import csv 

delimiter = ',' 

reader = csv.reader(DelimitedFile(fileName, ind='_|#|_', outd=delimiter)) 

for row in reader: 
    print row 
+0

Gracias, Alex, voy a dar una oportunidad – zenzic

1

módulo csv de Python no puede procesar delimitadores de más de un carácter, por lo que la respuesta corta a "¿Puede el módulo de Python CSV analizar archivos con delimitadores de varias columnas? " no es". Una simple prueba confirmó esto:

reader = csv.reader(open('test.csv'), delimiter = '|#|') 

que dio lugar a este error:

TypeError: "delimiter" must be an 1-character string

(test.csv era un archivo de 2 filas con delimitadores como se muestra en el código.)

De este modo se O bien deberá reemplazar sus delimitadores con delimitadores de caracteres individuales como se sugirió @alexblum, escribir su propio analizador o buscar un analizador diferente. Googling 'python csv delimitador de caracteres múltiples' apareció éxitos en unos pocos.

Cuestiones relacionadas