Saltar al contenido

Ruby: ¿Cómo puedo leer un archivo CSV que contiene dos encabezados en Ruby?

Te sugerimos que revises esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Parece que su archivo CSV se generó a partir de una hoja de cálculo de Excel que tiene columnas agrupadas de esta manera:

... |        Rushing        |         Passing         | ...
... |Rushes|Gain|Loss|Net|TD|Att|Cmp|Int|Yards|TD|Conv| ...

(No estoy seguro si restauré los grupos correctamente).

No hay herramientas estándar para trabajar con este tipo de archivos CSV, AFAIK. Tienes que hacer el trabajo manualmente.

  • Lea la primera línea, trátela como la primera línea de encabezado.
  • Lea la segunda línea, trátela como segunda línea de encabezado.
  • Lea la tercera línea, trátela como la primera línea de datos.

Yo recomendaría usar el smarter_csv gem, y proporcione manualmente los encabezados correctos:

 require 'smarter_csv'
 options = :user_provided_headers => ["Institution ID","Institution","Game Date","Uniform Number","Last Name","First Name", ... provide all headers here ... ], 
            :headers_in_file => false
 data = SmarterCSV.process(filename, options)
 data.pop # to ignore the first header line
 data.pop # to ignore the second header line
 # data now contains an array of hashes with your data

Consulte la página de GitHub para ver las opciones y los ejemplos. https://github.com/tilo/smarter_csv

Una opción que debes usar es :user_provided_headers y luego simplemente especifique los encabezados que desea en un array. De esta manera, puede solucionar casos como este.

tendrás que hacer data.pop para ignorar las líneas de encabezado en el archivo.

Tendrás que escribir tu propia lógica. CSV es realmente solo filas y columnas, y por sí mismo no tiene una idea inherente de lo que realmente es cada columna o fila, son solo datos sin procesar. Por lo tanto, CSV no tiene concepto ni conciencia de que tiene dos filas de encabezado, eso es algo humano, por lo que deberá crear su propia heurística.

Dado que sus filas de datos se ven así:

"721","Air Force","09/01/12",

Cuando comienza a analizar sus datos, si la primera columna representa un número entero, entonces, si lo convierte a un número entero y si es > 0 de lo que sabe que está tratando con una “fila” válida y no con un encabezado.

Comentarios y puntuaciones del tutorial

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *