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 *