You are on page 1of 15

Definicin de un archivo CSV

archivos CSV son una forma estndar de traslado de datos desde una aplicacin a otra . La mayora
de los programas que almacenan informacin en una base de datos , tales como la contabilidad y
software de seguimiento de ventas, puede exportar los datos como un archivo CSV para que pueda
ser entendida e import por otro programa . Definicin

CSV es la abreviatura de valores separados por comas . Al abrir un archivo CSV en un programa de
procesamiento de textos, cada informacin (valor) est separado por una coma. Los archivos CSV
son

tambin

conocidos

como

archivos

delimitados

por

comas

Tipos de aplicaciones

Cualquier programa de edicin de texto , incluyendo las aplicaciones bsicas, como el Bloc de notas
y WordPad, puede abrir un archivo CSV. Programas de hojas de clculo como Microsoft Excel y
Google Spreadsheets tambin puede importar archivos CSV , insertando cada pieza de datos en su
propia celda de tabla. Algunas aplicaciones que utilizan bases de datos, como los datos de Salesforce
,

importacin

exportacin

de

archivos

CSV

Identificacin

Identificar archivos CSV por su extensin de archivo " . Csv" . Para ver la extensin de un archivo en
Windows , haga clic en el nombre del archivo y seleccione " Propiedades". Haga clic en la pestaa
"General " y busca " valores separados por comas " en el "Tipo de Archivo" de lnea. En Mac OS X,
haga clic una vez en el archivo para resaltarlo y, a continuacin, pulse " Cmd + I " para que aparezca
la pantalla Obtener informacin. Mira debajo de " Nombre y Extensin " para ver si el nombre del
archivo

termina

en

CSV.

Tamao

Debido a que son archivos de texto bsicos con cero formato (por ejemplo, fuentes especiales , texto
en negrita ) , los archivos CSV son significativamente ms pequeos que otros archivos (por
ejemplo, archivos de Microsoft Excel XLS ) que contienen la misma informacin . osCommerce
Advertencia

piezas individuales de informacin ( los valores ) guardado en un archivo CSV no puede contener
comas , o el programa de importar el CSV interpretar el valor como dos valores independientes .
Por ejemplo , si guarda el nombre de una persona como " Brown , John " y la exportacin como un
archivo CSV , y luego tratar de importar el CSV en otro programa, el nuevo programa tendr en
cuenta " Brown" y " John " ser dos nombres distintos. Evite esta situacin eliminando las comas de
los valores individuales antes de tiempo (por ejemplo, cambiar "Brown , John " a " John Brown" ) .

Archivos CSV (Comma separated file)


Este tipo de archivos es un "estandar de facto" para muchas aplicaciones,
incluyendo planillas de clculo
y bases de datos.Archivo CSV:
Sebastin,Perez,33,23566777
Jose,Martinez,23,42121329
Karina,Gonzalez,32,24159857
Maria Laura,Yaes,19,43852144
Archivo CSV con otro separador (;):
Sebastin;Perez;33;23566777
Jose;Martinez;23;42121329
Karina;Gonzalez;32;24159857
Maria Laura;Yaes;19;43852144
Leyendo CSV sin usar mdulo CSV
Con las herramientas vistas hasta este momento podemos procesar dichos
archivos:
fh = open('archivo.txt')
for line in fh:
linea = line.split(',')
# procesar elementos:
nombre = linea[0]
apellido = linea[1]
# etc, etc

fh.close()
Aunqe Python tiene un mdulo especialmente preparado para esto:
CSV con mdulo CSV
Uso del mdulo CSV:
import csv
f = open('fn.csv')
lns = csv.reader(f)
for line in lns:
nombre = line[0]
apellido = line[1]
#Cambiando separador (delimitador):
f = open('fn.csv')
lns = csv.reader(f,delimiter=';')

TRABAJAR CON FICHEROS CSV


Los ejemplos de este tutorial estn hechos con el siguiente entorno de desarrollo:

Jboss Eclipse IDE Milestone 5.

JDK 1.5

Muchas veces necesitamos trabajar con documentos en forma de filas y columnas, como
fuentes de datos. Podemos para ello usar documentos excel y utilizar alguna librera como
POI para procesarlos. Sin embargo, a veces no es necesario complicar tanto las cosas y
podemos usar formatos de ficheros mas sencillos como los ficheros CSV (comma separated
values).
En
la
Wikipedia
dan
esta
definicin
de
CSV:
"Los ficheros CSV (del ingls comma-separated values) son un tipo de documento sencillo
para representar datos en forma de tabla, en las que las columnas se separan por comas y las
filas por saltos de lnea. Los campos que contengan una coma, un salto de lnea o una comilla
doble
deben
ser
encerrados
entre
comillas
dobles."
Podemos usar cualquier editor de textos para generar este tipo de documentos, incluso
tambin otros programas de hojas de clculo (excel, openoffice calc...) Adems, como norma
se usa como delimitador el caracter coma, aunque se puede usar otro caracter como
separador.

Vamos por lo tanto a generarnos nuestro primer documento CSV. Yo lo voy a hacer con
OpenOffice:

Vamos

Seleccionamos

Una

vez

el

guardado,

guardar

el

caracter

delimitador

comprobemos

lo

documento

que

el

es

como

juego

realmente

de

un

CSV:

caracteres:

fichero

CSV:

Se puede comprobar que un documento CSV no es ms que un fichero de texto, donde se


separan las columnas por un caracter delimitador y las filas por un salto de lnea.
Sera sencillo generarnos nuestro propio cdigo para tratar este tipo de ficheros, pero...Es
necesario
reinventar
la
rueda?.
Buscando

en

google,

he

encontrado

este

enlace:

http://sourceforge.net/projects/javacsv/
Aqui podemos encontrar una sencilla librera java para tratar este tipo de ficheros. Vamos a
probarla:

Descomprimimos en algun lugar del disco y encontramos la documentacin de la librera y el


fichero
con
los
binarios: csv.jar
Os recomiendo echar un vistazo a la documentacin (index.html), no perderis mucho tiempo

porque

son

EMPEZANDO

dos

clases:

TRABAJAR.

Vamos a empezar a hacer algo interesante. Os propongo el siguiente programa:


1. Leer el documento CSV creado arriba,
2. Para cada palabra, ponerla al revs y rellenar la segunda columna de cada fila.
3. Comprobar si cada palabra es palndroma (se lee igual de derecha a izquierda que de
izquierda a derecha) y rellenar la tercera columna con el resultado.

Para empezar, abriremos eclipse y crearemos un proyecto java nuevo (yo le he


llamado PALINDROMOS).
Aadiremos al CLASSPATH de nuestro proyecto la librera javacvs (cvs.jar):

Nos crearemos una clase que nos sirva de base para nuestro programa:
com.autentia.tutoriales.csv.Palindromos:

Nos vamos a crear otra clase que representar un fila en el fichero CSV. La
vamos a denominar VOPalindromo, a continuacin os muestro el cdigo:
public class VOPalindromo implements Serializable {
private String palabra;
private String reves;
private boolean palindromo;
public String getPalabra() {
return palabra;
}
public void setPalabra(String palabra) {
this.palabra = palabra;

}
public boolean isPalindromo() {
return palindromo;
}
public void setPalindromo(boolean palindromo) {
this.palindromo = palindromo;
}
public String getReves() {
return reves;
}
public void setReves(String reves) {
this.reves = reves;
}
}
Vamos a escribir ahora un mtodo en la clase Palindromos que lea todas las
palabras del fichero CSV, calcule si cada palabra es palndromo (capica) y las
almacene en memoria:
/**
*
*
*
*
*
*

Lee el fichero CSV llamado pathFichero, usando como delimitador de


columnas: "delimitador" y crea una lista en memoria de
Objetos de tipo VOPalindromo
@param pathFichero
@param delimitador
@return

*/
public List leePalindromos(String pathFichero, String delimitador)
throws Exception {
CsvReader cvsReader = null;
try {
File fichero = new File(pathFichero);
FileReader freader = new FileReader(fichero);
cvsReader = new CsvReader(freader,delimitador.charAt(0));
String[] headers = null;
List listaRegistros = new ArrayList();
// Leemos las cabeceras del fichero (primera fila).
if(cvsReader.readHeaders()) {
headers = cvsReader.getHeaders();
System.out.println("------- CABECERAS DEL FICHERO ------------");
for(int i=0;i<headers.length;i++) {
System.out.println(headers[i]);

}
System.out.println("-----------------------------------------------------");
}
// Leemos los registros
System.out.println("------- PALABRAS DEL FICHERO ------------");
while(cvsReader.readRecord()) {
// Podemos usar get con el nombre de la cabecera o por posicin
String palabra = cvsReader.get(headers[0]);
// Usamos StringBuffer para darle la vuelta a la palabra
StringBuffer aux = new StringBuffer(palabra);
String reves = aux.reverse().toString();
// Almacenamos el objeto VOPalindromo
VOPalindromo palindromo = new VOPalindromo();
palindromo.setPalabra(palabra);
palindromo.setReves(reves);
// Calculamos si es palindromo y lo almacenamos.
palindromo.setPalindromo(palabra.equalsIgnoreCase(reves));
listaRegistros.add(palindromo);
// Mostramos por pantalla:
System.out.println("-" + palabra +" == " + reves +
(palindromo.isPalindromo()?" : SI":" : NO"));
}
System.out.println("-----------------------------------------------------");
return listaRegistros;
} catch(Exception e) {
throw e;
} finally {
if(cvsReader!=null) {
cvsReader.close();
}
}
}
Invoquemos al mtodo desde main:
public static void main(String[] args) {
// Obtenemos el fichero y el delimitador
String fichero = args[0];
String delim = args[1];
Palindromos palindromo = new Palindromos();

List listaPalindromos = null;


try {
listaPalindromos=palindromo.leePalindromos(fichero,delim);
} catch (Exception e) {
e.printStackTrace();
}
}
Ejecutemos el cdigo (no olvidar pasrle los parametros a main):

Invocamos y mostramos la consola:

Bueno, tan slo nos falta la parte de almacenar los resultados en el fichero CSV.
Nos crearemos otro mtodo en la clase Palindromos al que llamaremos:
escribePalindromos
public void escribePalindromos(List listaPalindromos,String pathFichero, String
delimitador) throws Exception {
CsvWriter writercsv = null;
try {
File fichero = new File(pathFichero);
FileWriter fwriter = new FileWriter(fichero);
// Creamos la clase que nos permite escribir en el fichero CSV.
writercsv = new CsvWriter(fwriter,delimitador.charAt(0));
// Escribimos las cabeceras.
writercsv.write("PALABRA");
writercsv.write("AL REVES");
writercsv.write(" ES PALNDROMO ?");
writercsv.endRecord();
// Escribimos los resultados.
for(int i=0;i<listaPalindromos.size();i++) {
VOPalindromo palin = (VOPalindromo)listaPalindromos.get(i);
writercsv.write(palin.getPalabra());
writercsv.write(palin.getReves());

writercsv.write((palin.isPalindromo())?"SI":"NO");
writercsv.endRecord();
}

} catch(Exception e) {
throw e;
} finally {
if(writercsv!=null) {
writercsv.close();
}
}
}
Lo invocamos desde main:
....
....
try {
palindromo.escribePalindromos(listaPalindromos,fichero,delim);
} catch (Exception e) {
e.printStackTrace();
}

Vamos a comprobar el resultado en el fichero:

Ha sido sencillo verdad ?.


Os comento que hay gran cantidad de libreras para tratar ficheros CSV, esta es
una ms y funciona bien. Tambin podis generaros vuestra propia librera, ya
que los ficheros CSV como habis visto son muy sencillos de tratar.

You might also like