Los valores separados por comas ( CSV ) son un formato de archivo de texto que utiliza comas para separar valores y saltos de línea para separar registros. Un archivo CSV almacena datos tabulares (números y texto) en texto sin formato , donde cada línea del archivo generalmente representa un registro de datos . Cada registro consta de la misma cantidad de campos , y estos están separados por comas en el archivo CSV. Si el delimitador de campo en sí puede aparecer dentro de un campo, los campos pueden estar rodeados por comillas. [3]
El formato de archivo CSV es un tipo de formato de archivo separado por delimitadores . [4] Los delimitadores que se utilizan con frecuencia incluyen la coma, el tabulador , el espacio y el punto y coma. Los archivos separados por delimitadores suelen tener la extensión ".csv" incluso cuando el separador de campos no es una coma. Muchas aplicaciones o bibliotecas que consumen o producen archivos CSV tienen opciones para especificar un delimitador alternativo. [5]
La falta de adhesión al estándar CSV RFC 4180 hace necesario el soporte de una variedad de formatos CSV en el software de entrada de datos. A pesar de este inconveniente, CSV sigue estando muy extendido en las aplicaciones de datos y es ampliamente compatible con una variedad de software, incluidas las aplicaciones de hojas de cálculo comunes como Microsoft Excel . [6] Los beneficios citados a favor de CSV incluyen la legibilidad humana y la simplicidad del formato. [7]
CSV es un formato común de intercambio de datos que es ampliamente compatible con aplicaciones de consumo, empresariales y científicas. Entre sus usos más comunes se encuentra el traslado de datos tabulares [8] [9] entre programas que operan de forma nativa en formatos incompatibles (a menudo propietarios o no documentados). [1] Por ejemplo, un usuario puede necesitar transferir información desde un programa de base de datos que almacena datos en un formato propietario a una hoja de cálculo que utiliza un formato completamente diferente. La mayoría de los programas de bases de datos pueden exportar datos como CSV. La mayoría de los programas de hojas de cálculo pueden leer datos CSV, lo que permite utilizar CSV como formato intermedio al transferir datos de una base de datos a una hoja de cálculo.
CSV también se utiliza para almacenar datos. Las herramientas de ciencia de datos comunes como Pandas incluyen la opción de exportar datos a CSV para almacenamiento a largo plazo. [10] Los beneficios de CSV para el almacenamiento de datos incluyen la simplicidad de CSV hace que el análisis y la creación de archivos CSV sean fáciles de implementar y rápidos en comparación con otros formatos de datos, la legibilidad humana hace que la edición o corrección de datos sea más simple, [11] y la alta compresibilidad que conduce a archivos de datos más pequeños. [12] Alternativamente, CSV no admite relaciones de datos más complejas y no hace distinción entre valores nulos y vacíos, y en aplicaciones donde se necesitan estas características se prefieren otros formatos.
RFC 4180 propone una especificación para el formato CSV; sin embargo, la práctica real a menudo no sigue la RFC y el término "CSV" podría referirse a cualquier archivo que: [1] [13]
Dentro de estas limitaciones generales, se utilizan muchas variaciones. Por lo tanto, sin información adicional (como si se respeta el RFC 4180), un archivo que se afirma simplemente que está en formato "CSV" no está completamente especificado. Como resultado, algunas aplicaciones que admiten archivos CSV tienen asistentes de importación de texto que permiten a los usuarios obtener una vista previa de las primeras líneas del archivo y luego especificar los caracteres delimitadores, las reglas de comillas y el recorte de campos.
Los valores separados por comas son un formato de datos que es anterior a las computadoras personales por más de una década: el compilador IBM Fortran (nivel H extendido) bajo OS/360 admitió CSV en 1972. [14] La entrada/salida dirigida por listas ("formato libre") se definió en FORTRAN 77 , aprobado en 1978. La entrada dirigida por listas usaba comas o espacios como delimitadores, por lo que las cadenas de caracteres sin comillas no podían contener comas o espacios. [15]
El término "valor separado por comas" y la abreviatura "CSV" se utilizaban en 1983. [16] El manual de la computadora Osborne Executive, que incluía la hoja de cálculo SuperCalc , documenta la convención de comillas CSV que permite que las cadenas contengan comas incrustadas, pero el manual no especifica una convención para incrustar comillas dentro de cadenas entre comillas. [17]
Las listas de valores separados por comas son más fáciles de escribir (por ejemplo, en tarjetas perforadas ) que los datos alineados con columnas fijas, y eran menos propensas a producir resultados incorrectos si un valor se perforaba una columna fuera de su ubicación prevista.
Los archivos separados por comas se utilizan para el intercambio de información de bases de datos entre máquinas de dos arquitecturas diferentes. El carácter de texto simple de los archivos CSV evita en gran medida incompatibilidades como el orden de bytes y el tamaño de las palabras . Los archivos son en gran medida legibles para humanos, por lo que es más fácil trabajar con ellos en ausencia de una documentación o comunicación perfectas. [18]
La principal iniciativa de estandarización (transformar la " definición difusa de facto " en una más precisa y de iure ) se produjo en 2005, con la RFC 4180, que definió CSV como un tipo de contenido MIME . [19] Más tarde, en 2013, algunas de las deficiencias de la RFC 4180 fueron abordadas mediante una recomendación del W3C. [20]
En 2014, la IETF publicó la RFC 7111, que describe la aplicación de fragmentos de URI a documentos CSV. La RFC 7111 especifica cómo se pueden seleccionar rangos de filas, columnas y celdas de un documento CSV utilizando índices de posición. [21]
En 2015, el W3C , en un intento de mejorar CSV con semántica formal , publicó los primeros borradores de recomendaciones para los estándares de metadatos CSV, que comenzaron como recomendaciones en diciembre del mismo año. [22]
Los formatos CSV se utilizan mejor para representar conjuntos o secuencias de registros en los que cada registro tiene una lista idéntica de campos. Esto corresponde a una única relación en una base de datos relacional o a datos (aunque no cálculos) en una hoja de cálculo típica.
El formato se remonta a los primeros tiempos de la informática empresarial y se utiliza ampliamente para pasar datos entre computadoras con diferentes tamaños de palabras internas, necesidades de formato de datos, etc. Por este motivo, los archivos CSV son comunes en todas las plataformas informáticas.
CSV es un archivo de texto delimitado que utiliza una coma para separar valores (muchas implementaciones de herramientas de importación/exportación CSV permiten utilizar otros separadores; por ejemplo, el uso de una fila "Sep=^" como la primera fila en el archivo *.csv hará que Excel abra el archivo esperando que el signo de intercalación "^" sea el separador en lugar de la coma ","). Las implementaciones CSV simples pueden prohibir los valores de campo que contienen una coma u otros caracteres especiales como nuevas líneas. Las implementaciones CSV más sofisticadas los permiten, a menudo al requerir caracteres " ( comillas dobles ) alrededor de los valores que contienen caracteres reservados (como comas, comillas dobles o, con menos frecuencia, nuevas líneas). Los caracteres de comillas dobles incrustados pueden representarse mediante un par de comillas dobles consecutivas, [23] o anteponiendo una comilla doble con un carácter de escape como una barra invertida (por ejemplo, en Sybase Central).
Los formatos CSV no están limitados a un conjunto de caracteres en particular . [1] Funcionan igual de bien con conjuntos de caracteres Unicode (como UTF-8 o UTF-16 ) que con ASCII (aunque los programas particulares que admiten CSV pueden tener sus propias limitaciones). Los archivos CSV normalmente sobrevivirán incluso a una traducción simple de un conjunto de caracteres a otro (a diferencia de casi todos los formatos de datos propietarios). Sin embargo, CSV no proporciona ninguna forma de indicar qué conjunto de caracteres está en uso, por lo que debe comunicarse por separado o determinarse en el extremo receptor (si es posible).
Las bases de datos que incluyen múltiples relaciones no se pueden exportar como un único archivo CSV [ cita requerida ] . De manera similar, CSV no puede representar de manera natural datos jerárquicos u orientados a objetos . Esto se debe a que se espera que cada registro CSV tenga la misma estructura. Por lo tanto, CSV rara vez es apropiado para documentos creados con HTML , XML u otras tecnologías de marcado o procesamiento de textos.
Las bases de datos estadísticas de diversos campos suelen tener una estructura generalmente similar a una relación, pero con algunos grupos de campos repetibles. Por ejemplo, las bases de datos de salud, como la Encuesta demográfica y de salud, suelen repetir algunas preguntas para cada hijo de un padre determinado (quizás hasta un número máximo fijo de hijos). Los sistemas de análisis estadístico suelen incluir utilidades que pueden "rotar" dichos datos; por ejemplo, un registro de "padre" que incluye información sobre cinco hijos se puede dividir en cinco registros separados, cada uno de los cuales contiene (a) la información sobre un hijo y (b) una copia de toda la información no específica del hijo. CSV puede representar la forma "vertical" u "horizontal" de dichos datos.
En una base de datos relacional, problemas similares se pueden solucionar fácilmente creando una relación independiente para cada uno de esos grupos y conectando los registros "secundarios" con los registros "principales" relacionados mediante una clave externa (como un número de identificación o el nombre del principal). En lenguajes de marcado como XML, dichos grupos suelen estar incluidos dentro de un elemento principal y se repiten según sea necesario (por ejemplo, varios <child>
nodos dentro de un único <parent>
nodo). Con CSV no existe una solución de archivo único ampliamente aceptada.
El nombre "CSV" indica el uso de la coma para separar los campos de datos. Sin embargo, el término "CSV" se utiliza ampliamente para referirse a una gran familia de formatos que difieren en muchos aspectos. Algunas implementaciones permiten o requieren comillas simples o dobles alrededor de algunos o todos los campos; y algunas reservan el primer registro como encabezado que contiene una lista de nombres de campo. El conjunto de caracteres que se utiliza no está definido: algunas aplicaciones requieren una marca de orden de bytes (BOM) Unicode para aplicar la interpretación Unicode (a veces incluso una BOM UTF-8). [1] Los archivos que utilizan el carácter de tabulación en lugar de la coma se pueden denominar con más precisión "TSV" para valores separados por tabulaciones.
Otras diferencias de implementación incluyen el manejo de separadores de campo más comunes (como el espacio o el punto y coma) y caracteres de nueva línea dentro de los campos de texto. Otra sutileza es la interpretación de una línea en blanco: puede ser igualmente el resultado de escribir un registro de cero campos o un registro de un campo de longitud cero; por lo tanto, su decodificación es ambigua.
El estándar técnico RFC 4180 de 2005 formaliza el formato de archivo CSV y define el tipo MIME "text/csv" para el manejo de campos basados en texto. Sin embargo, la interpretación del texto de cada campo sigue siendo específica de la aplicación. Los archivos que siguen el estándar RFC 4180 pueden simplificar el intercambio de CSV y deberían ser ampliamente portables. Entre sus requisitos:
La mayoría de los programas que afirman leer archivos CSV pueden procesar el formato. Las excepciones son (a) los programas pueden no admitir saltos de línea dentro de campos entrecomillados, (b) los programas pueden confundir el encabezado opcional con datos o interpretar la primera línea de datos como un encabezado opcional y (c) las comillas dobles en un campo pueden no analizarse correctamente de manera automática.
En 2011, la Open Knowledge Foundation (OKF) y varios socios crearon un grupo de trabajo sobre protocolos de datos, que más tarde evolucionó hasta convertirse en la iniciativa Frictionless Data. Uno de los principales formatos que lanzaron fue el paquete de datos tabulares, que se basaba en gran medida en CSV, utilizándolo como el principal formato de transporte de datos y añadiendo metadatos básicos de tipo y esquema (CSV carece de cualquier información de tipo para distinguir la cadena "1" del número 1). [24]
La Iniciativa de Datos sin Fricción también ha proporcionado un Formato de Descripción de Dialecto CSV estándar para describir diferentes dialectos de CSV, por ejemplo, especificando el separador de campo o las reglas de citación. [25]
En 2013, el grupo de trabajo "CSV en la Web" del W3C comenzó a especificar tecnologías que proporcionaran una mayor interoperabilidad para las aplicaciones web que utilizan CSV o formatos similares. [26] El grupo de trabajo completó su trabajo en febrero de 2016 y se cerró oficialmente en marzo de 2016 con la publicación de un conjunto de documentos y recomendaciones del W3C [27] para modelar "Datos Tabulares", [28] y mejorar CSV con metadatos y semántica .
Existen muchos documentos informales que describen los formatos "CSV". El IETF RFC 4180 (resumido anteriormente) define el formato para el tipo MIME "text/csv" registrado ante la IANA .
Las reglas típicas de estas y otras especificaciones e implementaciones "CSV" son las siguientes:
ord(',')*256..ord(',')*256+255
1997, Ford, E350
"1997", "Ford", "E350"
1997, Ford, E350, "Camioneta súper lujosa"
1997, Ford, E350, camioneta "súper" y "lujosa"
1997, Ford, E350, "Consigue uno ahora""van rápido"
1997, Ford, E350no es lo mismo que1997, Ford, E350
1997, "Ford", E350
1997, Ford, E350, "Camioneta de súper lujo"
Los Ángeles,34°03′N,118°15′ONueva York, 40°42′46″N, 74°00′21″OParís, 48°51′24″N,2°21′03″E
Año, Marca, Modelo1997, Ford, E3502000,Mercurio,Puma
La tabla de datos anterior se puede representar en formato CSV de la siguiente manera:
Año, Marca, Modelo, Descripción, Precio1997, Ford, E350, "aire acondicionado, abs, luna", 3000,001999, Chevrolet, Venture, edición extendida, 4900,001999, Chevrolet, "Venture "Edición extendida, muy grande"", "", 5000,001996, Jeep, Grand Cherokee, "¡¡DEBO VENDERLO!!".Aire, techo corredizo, cargado",4799.00
Ejemplo de un archivo CSV de EE. UU./Reino Unido (donde el separador decimal es un punto y el separador de valores es una coma):
Año, Marca, Modelo, Longitud1997, Ford, E350, 2,352000,Mercurio,Puma,2,38
Ejemplo de un archivo CSV/ DSV europeo análogo (donde el separador decimal es una coma y el separador de valores es un punto y coma):
Año;Marca;Modelo;Longitud1997;Vado;E350;2,352000;Mercurio;Puma;2,38
El último formato no cumple con el RFC 4180. [29] El cumplimiento se puede lograr mediante el uso de una coma en lugar de un punto y coma como separador y entrecomillando todos los números que tienen un signo decimal.
Algunas aplicaciones utilizan CSV como formato de intercambio de datos para mejorar su interoperabilidad , exportando e importando CSV. Otras utilizan CSV como formato interno .
Como formato de intercambio de datos: el formato de archivo CSV es compatible con casi todos los sistemas de gestión de bases de datos y hojas de cálculo.
COPY
comando , que permite guardar y cargar datos en y desde un archivo. guarda el contenido de una tabla en un archivo llamado . [30]COPY (SELECT * FROM articles) TO '/home/wikipedia/file.csv' (FORMAT csv)
articles
/home/wikipedia/file.csv
Como representación interna (principal u opcional). Puede ser nativa o externa , pero difiere del formato de intercambio ("solo exportación/importación") porque no es necesario crear una copia en otro formato:
CREATE FOREIGN TABLE
CREATE EXTENSION file_fdw
El formato CSV es compatible con las bibliotecas disponibles para muchos lenguajes de programación . La mayoría proporciona alguna forma de especificar el delimitador de campo, el separador decimal , la codificación de caracteres, las convenciones de comillas, el formato de fecha, etc.
Los programas que funcionan con CSV pueden tener límites en la cantidad máxima de filas que pueden tener los archivos CSV. A continuación, se incluye una lista de software común y sus limitaciones: [34]
Para los usuarios familiarizados con los procesadores FORTRAN IV G y H predecesores, estas son las principales nuevas capacidades del lenguaje