2010-06-06 56 views
12

¿Podría alguien proporcionar una forma efectiva de verificar si un archivo tiene formato CSV usando Python?Compruebe si el archivo tiene un formato CSV con Python

+1

Bienvenido a stackoverflow. Su pregunta podría usar más detalles. Como punto de partida, ¿podría definir lo que quiere decir con "formato csv"? Deberá definir cuidadosamente este formato. ¿Existen caracteres de escape, marcadores de comentarios o caracteres de comillas en este formato? Si esta pregunta es tarea, por favor agregue una etiqueta llamada "tarea" para que las respuestas puedan darle el tipo correcto de orientación. –

+1

Quiero decir en el archivo CSV archivo de valores separados por comas vea http://en.wikipedia.org/wiki/Comma-separated_values ​​para más detalles. – Joe

+1

Si se entiende por 'valores separados por comas' por csv, entonces no hay una norma de ese formato. – Max

Respuesta

0

Python tiene un csv module, por lo que puede intentar analizarlo en una variedad de dialectos diferentes.

-3

Debe pensar claramente en lo que considera que es un archivo CSV.

Por ejemplo, qué tipo de caracteres pueden ocurrir entre las comas. ¿Es texto solo? ¿Pueden ser caracteres Unicode también? ¿Debería cada línea tener el mismo número de comas?

No tengo una definición estricta de un archivo CSV del que sea consciente. Por lo general, es texto ASCII separado por comas y cada línea tiene el mismo número de comas y termina con el terminador de línea de la plataforma.

De todos modos, una vez que responda las preguntas anteriores, estará un poco más lejos en su camino para saber cómo detectar cuándo un archivo es un archivo CSV.

22

Puede intentar algo como lo siguiente, pero solo porque obtiene un dialecto de csv.Sniffer realmente no será suficiente para garantizar que tenga un documento CSV válido.

csv_fileh = open(somefile, 'rb') 
try: 
    dialect = csv.Sniffer().sniff(csv_fileh.read(1024)) 
    # Perform various checks on the dialect (e.g., lineseparator, 
    # delimiter) to make sure it's sane 

    # Don't forget to reset the read position back to the start of 
    # the file before reading any entries. 
    csv_fileh.seek(0) 
except csv.Error: 
    # File appears not to be in CSV format; move along 
+0

* "... no será suficiente para garantizar ..." *: Sí. Sin proporcionar un dialecto, el mío detectó un .ZIP como un CSV válido, con @ como separador – alanjds

-3

Intente analizarlo como CSV y vea si obtiene un error.

Cuestiones relacionadas