Leer y escribir archivos CSV en Python

    驴Qu茅 es un archivo CSV?

    Un archivo CSV (valores separados por comas) es un archivo que usa un formato determinado para almacenar datos. Este formato de archivo organiza la informaci贸n, que contiene un registro por l铆nea, con cada campo (columna) separado por un delimitador. El delimitador m谩s utilizado suele ser una coma.

    Este formato es tan com煤n que de hecho ha sido estandarizado en el RFC 4180. Sin embargo, este est谩ndar no siempre se sigue y hay una falta de uso del est谩ndar universal. El formato exacto utilizado puede depender en alg煤n momento de la aplicaci贸n para la que se est谩 utilizando.

    Los archivos CSV se usan com煤nmente porque son f谩ciles de leer y administrar, son de tama帽o peque帽o y r谩pidos de procesar / transferir. Debido a estos beneficios, se utilizan con frecuencia en aplicaciones de software, desde tiendas de comercio electr贸nico en l铆nea hasta aplicaciones m贸viles y herramientas de escritorio. Por ejemplo, Magento, una plataforma de comercio electr贸nico, es conocida por su soporte de CSV.

    Adem谩s, muchas aplicaciones, como Microsoft Excel, Bloc de notas y Google Docs, se pueden utilizar para importar o exportar archivos CSV.

    El m贸dulo csv Python

    los m贸dulo csv implementa clases para operar con archivos CSV. Se centra en el formato preferido por Microsoft Excel. Sin embargo, su funcionalidad es lo suficientemente amplia como para trabajar con archivos CSV que usan diferentes delimitadores y comillas.

    Este m贸dulo proporciona las funciones reader y writer, que funcionan de forma secuencial. Tambi茅n tiene el DictReader y DictWriter clases para administrar sus datos CSV en forma de un objeto de diccionario de Python.

    csv.reader

    los csv.reader(csvfile, dialect="excel", **fmtparams) El m茅todo se puede utilizar para extraer datos de un archivo que contiene datos en formato CSV.

    Toma los siguientes par谩metros:

    • csvfile: Un objeto que admite el protocolo iterador, que en este caso suele ser un objeto de archivo para el archivo CSV
    • dialect (opcional): el nombre del dialecto que se utilizar谩 (que se explicar谩 en secciones posteriores)
    • fmtparams (opcional): par谩metros de formato que sobrescribir谩n los especificados en el dialecto

    Este m茅todo devuelve un objeto lector, que se puede iterar para recuperar las l铆neas de su CSV. Los datos se leen como una lista de cadenas. Si especificamos el formato QUOTE_NONNUMERIC, los valores no cotizados se convierten en valores flotantes.

    En la secci贸n Lectura de archivos CSV de este art铆culo se ofrece un ejemplo de c贸mo utilizar este m茅todo.

    csv.writer

    los csv.writer(csvfile, dialect="excel", **fmtparams) El m茅todo, que es similar al m茅todo del lector que describimos anteriormente, es un m茅todo que nos permite escribir datos en un archivo en formato CSV.

    Este m茅todo toma los siguientes par谩metros:

    • csvfile: Cualquier objeto con un write() m茅todo, que en este caso suele ser un objeto de archivo
    • dialect (opcional): el nombre del dialecto a utilizar
    • fmtparams (opcional): par谩metros de formato que sobrescribir谩n los especificados en el dialecto

    Una nota de precauci贸n con este m茅todo: si el csvfile El par谩metro especificado es un objeto de archivo, debe haber sido abierto con newline="". Si no se especifica, las nuevas l铆neas dentro de los campos entre comillas no se interpretar谩n correctamente y, seg煤n la plataforma de trabajo, se pueden agregar caracteres adicionales, como ‘ r’.

    csv.DictReader y csv.DictWriter

    los csv m贸dulo tambi茅n nos proporciona el DictReader y DictWriter clases, que nos permiten leer y escribir en archivos usando objetos de diccionario.

    La clase DictReader() funciona de manera similar a csv.reader, pero en Python 2 mapea los datos a un diccionario y en Python 3 mapea los datos a un OrderedDict. Las claves vienen dadas por el par谩metro field-names.

    Y como DictReader, la clase DictWriter() funciona de manera muy similar a la csv.writer , aunque asigna el diccionario a filas de salida. Sin embargo, tenga en cuenta que, dado que los diccionarios de Python no est谩n ordenados, no podemos predecir el orden de las filas en el archivo de salida.

    Ambas clases incluyen un par谩metro opcional para usar dialectos.

    Dialectos

    UN dialecto, en el contexto de la lectura y escritura de CSV, es una construcci贸n que le permite crear, almacenar y reutilizar varios par谩metros de formato para sus datos.

    Python ofrece dos formas diferentes de especificar par谩metros de formato. La primera es declarar una subclase de esta clase, que contiene los atributos espec铆ficos. El segundo es especificando directamente los par谩metros de formato, utilizando los mismos nombres que se definen en el Dialect clase.

    Dialect admite varios atributos. Los m谩s utilizados son:

    • Dialect.delimiter: Se utiliza como car谩cter de separaci贸n entre campos. El valor predeterminado es una coma (,).
    • Dialect.quotechar: Se utiliza para citar campos que contienen caracteres especiales. El valor predeterminado es la comilla doble (“).
    • Dialect.lineterminator: Se utiliza para crear nuevas l铆neas. El valor predeterminado es ‘ r n’.

    Utilice esta clase para decirle al csv m贸dulo c贸mo interactuar con sus datos CSV no est谩ndar.

    Versiones

    Una cosa importante a tener en cuenta si est谩 utilizando Python 2.7: no es tan f谩cil admitir la entrada Unicode en esta versi贸n de Python, por lo que es posible que deba asegurarse de que toda su entrada est茅 en UTF-8 o caracteres ASCII imprimibles.

    Un ejemplo de archivo CSV

    Podemos crear un archivo CSV f谩cilmente con un editor de texto o incluso con Excel. En el siguiente ejemplo, el archivo de Excel tiene una combinaci贸n de n煤meros (1, 2 y 3) y palabras (Buenos d铆as, Buenas tardes, Buenas noches), cada uno de ellos en una celda diferente.

    Para guardar este archivo como CSV, haga clic en Archivo-> Guardar como, luego en la ventana Guardar como, seleccione “Valores separados por comas (.csv)” debajo de Formato desplegable. Gu谩rdelo como csvexample.csv para su uso posterior.

    La estructura del archivo CSV se puede ver usando un editor de texto, como el Bloc de notas o Sublime Text. Aqu铆, podemos obtener los mismos valores que en el archivo de Excel, pero separados por comas.

    1,2,3
    Good morning,Good afternoon,Good evening
    

    Usaremos este archivo en los siguientes ejemplos.

    Tambi茅n podemos cambiar el delimitador a algo que no sea una coma, como una barra diagonal (“https://Pharos.sh.com/”). Realice este cambio en el archivo anterior, reemplazando todas las comas con barras diagonales y gu谩rdelo como csvexample2.csv para su uso posterior. Se ver谩 de la siguiente manera:

    1/2/3
    Good morning/Good afternoon/Good evening
    

    Estos tambi茅n son datos CSV v谩lidos, siempre que usemos el dialecto y el formato correctos para leer / escribir los datos, que en este caso requerir铆a un delimitador “https://Pharos.sh.com/”.

    Lectura de archivos CSV

    Un archivo CSV simple

    En este ejemplo vamos a mostrar c贸mo puede leer el archivo csvexample.csv, que creamos y explicamos en una secci贸n anterior. El c贸digo es el siguiente:

    import csv
    
    with open('csvexample.csv', newline="") as myFile:
        reader = csv.reader(myFile)
        for row in reader:
            print(row)
    

    En este c贸digo abrimos nuestro archivo CSV como myFile y luego usa el csv.reader m茅todo para extraer los datos en el reader objeto, que luego podemos iterar para recuperar cada l铆nea de nuestros datos. En este ejemplo, para mostrar que los datos realmente se leyeron, simplemente los imprimimos en la consola.

    Si guardamos el c贸digo en un archivo llamado reader.py y lo ejecutamos, el resultado deber铆a mostrar lo siguiente:

    $ python reader.py
    ['1', '2', '3']
    ['Good morning', 'Good afternoon', 'Good evening']
    

    Como podemos ver al ejecutar este c贸digo, obtenemos el contenido del archivo csvexample.csv, que se imprime en la consola, excepto que ahora est谩 en una forma estructurada con la que podemos trabajar m谩s f谩cilmente en nuestro c贸digo.

    Cambiar el delimitador

    los csv El m贸dulo nos permite leer archivos CSV, incluso cuando algunas de las caracter铆sticas del formato de archivo son diferentes del formato est谩ndar. Por ejemplo, podemos leer un archivo con un delimitador diferente, como tabulaciones, puntos o incluso espacios (cualquier car谩cter, en realidad). En nuestro otro ejemplo, csvexample2.csv, hemos reemplazado la coma con una barra inclinada para demostrar esto.

    Para realizar la misma tarea anterior con este nuevo formato, debemos modificar el c贸digo para indicar el nuevo delimitador que se est谩 utilizando. En este ejemplo, hemos guardado el c贸digo en un archivo llamado reader2.py. El programa modificado es el siguiente:

    import csv
    
    with open('csvexample2.csv', newline="") as myFile:
        reader = csv.reader(myFile, delimiter="https://Pharos.sh.com/", quoting=csv.QUOTE_NONE)
        for row in reader:
            print(row)
    

    Como podemos ver en el c贸digo anterior, hemos modificado la tercera l铆nea de c贸digo agregando el delimiter y asign谩ndole un valor de “https://Pharos.sh.com/”. Esto le dice al m茅todo que trate todos los caracteres “https://Pharos.sh.com/” como el punto de separaci贸n entre los datos de la columna.

    Tambi茅n hemos agregado el par谩metro de cotizaci贸n y le hemos asignado un valor de csv.QUOTE_NONE, lo que significa que el m茅todo no debe utilizar comillas especiales durante el an谩lisis. Como era de esperar, el resultado es similar al ejemplo anterior:

    $ python reader2.py
    ['1', '2', '3']
    ['Good morning', 'Good afternoon', 'Good evening']
    

    Como puede ver, gracias a los peque帽os cambios en el c贸digo todav铆a obtenemos el mismo resultado esperado.

    Creando un dialecto

    los csv El m贸dulo nos permite crear un dialecto con las caracter铆sticas espec铆ficas de nuestro archivo CSV. Por lo tanto, el mismo resultado anterior tambi茅n se puede lograr con el siguiente c贸digo:

    import csv
    
    csv.register_dialect('myDialect', delimiter="https://Pharos.sh.com/", quoting=csv.QUOTE_NONE)
    
    with open('csvexample2.csv', newline="") as myFile:
       reader = csv.reader(myFile, dialect="myDialect")
       for row in reader:
           print(row) 
    

    Aqu铆 creamos y registramos nuestro propio dialecto con nombre, que en este caso usa los mismos par谩metros de formato que antes (barras inclinadas y sin comillas). Luego especificamos a csv.reader que queremos usar el dialecto que registramos pasando su nombre como el dialect par谩metro.

    Si guardamos este c贸digo en un archivo llamado reader3.py y lo ejecutamos, el resultado ser谩 el siguiente:

    $ python reader3.py
    ['1', '2', '3']
    ['Good morning', 'Good afternoon', 'Good evening']
    

    Nuevamente, esta salida es exactamente la misma que la anterior, lo que significa que analizamos correctamente los datos CSV no est谩ndar.

    Escribir en archivos CSV

    Al igual que leer CSV, el csv El m贸dulo tambi茅n proporciona una gran cantidad de funciones para escribir datos en un archivo CSV. los writer El objeto presenta dos funciones, a saber writerow() y writerows(). La diferencia entre ellos, como probablemente pueda ver por los nombres, es que la primera funci贸n solo escribir谩 una fila, y la funci贸n writerows() escribe varias filas a la vez.

    El c贸digo del ejemplo siguiente crea una lista de datos, y cada elemento de la lista exterior representa una fila en el archivo CSV. Luego, nuestro c贸digo abre un archivo CSV llamado csvexample3.csv, crea un writer objeto y escribe nuestros datos en el archivo utilizando el writerows() m茅todo.

    import csv
    
    myData = [[1, 2, 3], ['Good Morning', 'Good Evening', 'Good Afternoon']]
    myFile = open('csvexample3.csv', 'w')
    with myFile:
       writer = csv.writer(myFile)
       writer.writerows(myData)
    

    El archivo resultante, csvexample3.csv, debe tener el siguiente texto:

    1,2,3
    Good Morning,Good Evening,Good Afternoon
    

    los writer object tambi茅n se adapta a otros formatos CSV. El siguiente ejemplo crea y usa un dialecto con “https://Pharos.sh.com/” como delimitador:

    import csv
    
    myData = [[1, 2, 3], ['Good Morning', 'Good Evening', 'Good Afternoon']]
    
    csv.register_dialect('myDialect', delimiter="https://Pharos.sh.com/", quoting=csv.QUOTE_NONE)
    
    myFile = open('csvexample4.csv', 'w')
    with myFile:
       writer = csv.writer(myFile, dialect="myDialect")
       writer.writerows(myData)
    

    Similar a nuestro ejemplo de “lectura”, creamos un dialecto de la misma manera (a trav茅s de csv.register_dialect()) y util铆celo de la misma manera, especific谩ndolo por su nombre.

    Y nuevamente, ejecutar el c贸digo anterior da como resultado el siguiente resultado en nuestro nuevo archivo csvexample4.csv:

    1/2/3
    Good Morning/Good Evening/Good Afternoon
    

    Usar diccionarios

    En muchos casos, nuestros datos no se formatear谩n como una matriz 2D (como vimos en los ejemplos anteriores), y ser铆a bueno si tuvi茅ramos un mejor control sobre los datos que leemos. Para ayudar con este problema, el csv El m贸dulo proporciona clases auxiliares que nos permiten leer / escribir nuestros datos CSV hacia / desde objetos de diccionario, lo que hace que sea mucho m谩s f谩cil trabajar con los datos.

    Interactuar con sus datos de esta manera es mucho m谩s natural para la mayor铆a de las aplicaciones Python y ser谩 m谩s f谩cil de integrar en su c贸digo gracias a la familiaridad de dict.

    Leer un archivo CSV con DictReader

    Con su editor de texto favorito, cree un archivo CSV llamado countries.csv con el siguiente contenido:

    country,capital
    France,Paris
    Italy,Rome
    Spain,Madrid
    Russia,Moscow
    

    Ahora, el formato de estos datos puede verse un poco diferente al de nuestros ejemplos anteriores. La primera fila de este archivo contiene los nombres de campo / columna, que proporciona una etiqueta para cada columna de datos. Las filas de este archivo contienen pares de valores (pa铆s, capital) separados por una coma. Estas etiquetas son opcionales, pero tienden a ser muy 煤tiles, especialmente cuando usted mismo tiene que buscar estos datos.

    Para leer este archivo, creamos el siguiente c贸digo:

    import csv  
    
    with open('countries.csv') as myFile:  
        reader = csv.DictReader(myFile)
        for row in reader:
            print(row['country'])
    

    Seguimos recorriendo cada fila de datos, pero observe c贸mo ahora podemos acceder a las columnas de cada fila por su etiqueta, que en este caso es el pa铆s. Si quisi茅ramos, tambi茅n podr铆amos acceder a la capital con row['capital'].

    La ejecuci贸n del c贸digo da como resultado lo siguiente:

    $ python readerDict.py
    France
    Italy
    Spain
    Russia
    

    Escribir en un archivo con DictWriter

    Tambi茅n podemos crear un archivo CSV usando nuestros diccionarios. En el siguiente c贸digo, creamos un diccionario con los campos de pa铆s y capital. Entonces creamos un writer objeto que escribe datos en nuestro archivo countries.csv, que tiene el conjunto de campos previamente definidos con la lista myFields.

    Despu茅s de eso, primero escribimos la fila del encabezado con el writeheader() m茅todo, y luego los pares de valores usando el writerow() m茅todo. La posici贸n de cada valor en la fila se especifica mediante la etiqueta de la columna. Probablemente pueda imaginar lo 煤til que se vuelve esto cuando tiene decenas o incluso cientos de columnas en sus datos CSV.

    import csv
    
    myFile = open('countries.csv', 'w')
    with myFile:    
        myFields = ['country', 'capital']
        writer = csv.DictWriter(myFile, fieldnames=myFields)    
        writer.writeheader()
        writer.writerow({'country' : 'France', 'capital': 'Paris'})
        writer.writerow({'country' : 'Italy', 'capital': 'Rome'})
        writer.writerow({'country' : 'Spain', 'capital': 'Madrid'})
        writer.writerow({'country' : 'Russia', 'capital': 'Moscow'})
    

    Y finalmente, ejecutar este c贸digo nos da la salida CSV correcta, con etiquetas y todo:

    country,capital
    France,Paris
    Italy,Rome
    Spain,Madrid
    Russia,Moscow
    

    Conclusi贸n

    Los archivos CSV son un formato de almacenamiento de archivos 煤til que muchos desarrolladores utilizan en sus proyectos. Son peque帽os, f谩ciles de administrar y ampliamente utilizados en el desarrollo de software. Por suerte para usted, Python tiene un m贸dulo dedicado para ellos que proporciona m茅todos y clases flexibles para administrar archivos CSV de una manera sencilla y eficiente.

    En este art铆culo le mostramos c贸mo utilizar el csv M贸dulo de Python para leer y escribir datos CSV en un archivo. Adem谩s de esto, tambi茅n mostramos c贸mo crear dialectos y usar clases auxiliares como DictReader y DictWriter para leer y escribir archivos CSV desde / hacia dict objetos.

     

    Etiquetas:

    Deja una respuesta

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