Manejando Archivos CSV con Python
No siempre los archivos CSV "Comma Separated Values" (Valores Separados por Coma) usan la coma para separar los datos, algunas veces usan TAB o espacios
Si trabajas con archivos CSV y usas el módulos csv de Python podrías hacer tu trabajo un poco mas facil.
Trabajar con archivos CSV en Python probablemente no seria tan fácil. Por ejemplo, si tienes un archivo CSV que contiene 3 columnas "A", "B" y "C D".
El siguiente programa en Python lee y muestra su contenido:
El cual muestra lo siguiente:
Ademas, el modulo csv provee un objecto para escribir archivos CSV. El siguiente programa Python convierte el archivo prueba CSV en un archivo CSV que usa tabs como separador de valores y tiene todo los valores entre comillas. El carácter delimitador y la comillas, están especificados cuando el escritor es creado. La misma opcion esta disponible cuando se crea el objecto lector.
Al ejecutarlo muestra lo siguiente:
El siguiente ejemplo muestra como escribir una función para tratar de determinar que formato de archivo CSV es antes de abrirlo, así se puede lidiar con comas y tabs y diferentes tipos de comillas.
Si trabajas con archivos CSV y usas el módulos csv de Python podrías hacer tu trabajo un poco mas facil.
Trabajar con archivos CSV en Python probablemente no seria tan fácil. Por ejemplo, si tienes un archivo CSV que contiene 3 columnas "A", "B" y "C D".
$ cat prueba.csv
A,B,"C D"
1,2,"3 4"
5,6,7
El siguiente programa en Python lee y muestra su contenido:
import csv
ifile = open('prueba.csv', "rb")
reader = csv.reader(ifile)
rownum = 0
for row in reader:
# Save header row.
if rownum == 0:
header = row
else:
colnum = 0
for col in row:
print '%-8s: %s' % (header[colnum], col)
colnum += 1
rownum += 1
ifile.close()
El cual muestra lo siguiente:
$ python csv1.py
A : 1
B : 2
C D : 3 4
A : 5
B : 6
C D : 7
Ademas, el modulo csv provee un objecto para escribir archivos CSV. El siguiente programa Python convierte el archivo prueba CSV en un archivo CSV que usa tabs como separador de valores y tiene todo los valores entre comillas. El carácter delimitador y la comillas, están especificados cuando el escritor es creado. La misma opcion esta disponible cuando se crea el objecto lector.
import csv
ifile = open('prueba.csv', "rb")
reader = csv.reader(ifile)
ofile = open('ttest.csv', "wb")
writer = csv.writer(ofile, delimiter='\t', quotechar='"', quoting=csv.QUOTE_ALL)
for row in reader:
writer.writerow(row)
ifile.close()
ofile.close()
Al ejecutarlo muestra lo siguiente:
$ python csv2.py
$ cat ttest.csv
"A" "B" "C D"
"1" "2" "3 4"
"5" "6" "7"
El siguiente ejemplo muestra como escribir una función para tratar de determinar que formato de archivo CSV es antes de abrirlo, así se puede lidiar con comas y tabs y diferentes tipos de comillas.
Fuente.
import os
import sys
import csv
def opencsv(filename):
tfile = open(filename, "r")
line = tfile.readline()
tfile.close()
if line[0] == '"':
quote_char = '"'
quote_opt = csv.QUOTE_ALL
elif line[0] == "'":
quote_char = "'"
quote_opt = csv.QUOTE_ALL
else:
quote_char = '"'
quote_opt = csv.QUOTE_MINIMAL
if line.find('\t') != -1:
delim_char = '\t'
else:
delim_char = ','
tfile = open(filename, "rb")
reader = csv.reader(tfile, delimiter=delim_char, quotechar=quote_char, quoting=quote_opt)
return (tfile, reader)
Comentarios