Explicación detallada del método de lectura y escritura de archivos CSV en Python

Uno de los formatos de intercambio de datos más populares es el formato CSV. Un programa que necesita ingresar y generar información que no sea el teclado y la consola, y el intercambio de información a través de archivos de texto es una forma común de compartir información entre programas.

Aquí hay un resumen conmigo sobre cómo leer, procesar y analizar CSV de archivos de texto usando Python.
inserte la descripción de la imagen aquí

¿Qué es un archivo CSV?

Un archivo CSV (archivo de valores separados por comas) es un archivo de texto sin formato que utiliza una estructura específica para organizar datos tabulares. Debido a que es un archivo de texto sin formato, solo puede contener datos de texto reales, en otras palabras, caracteres ASCII o Unicode imprimibles.

La estructura de un archivo CSV viene dada por su nombre. Por lo general, los archivos CSV usan comas para separar cada valor de datos específico.

column 1 name,column 2 name, column 3 name
1st row data 1,1st row data 2,1st row data 3
2nd row data 1,2nd row data 2,2nd row data 3

Observe cómo cada dato está separado por comas. Por lo general, la primera fila identifica cada dato, en otras palabras, el nombre de la columna de datos. Cada línea después de eso son datos reales y están limitadas por el tamaño del archivo.

Por lo general, la coma delimitadora (,) no es la única que se usa. Otros delimitadores populares incluyen los caracteres de tabulación ( \t ), dos puntos ( : ) y punto y coma ( ; ).

El análisis correcto de un archivo CSV requiere saber qué delimitador se está utilizando.

¿De dónde vino el archivo CSV?

Los archivos CSV a menudo son creados por programas que procesan grandes cantidades de datos. Son una forma conveniente de exportar datos de hojas de cálculo y bases de datos, e importar o usar datos en otros programas. Por ejemplo, los resultados de un programa de minería de datos se pueden exportar como un archivo CSV, que luego se puede importar a una hoja de cálculo para analizar datos, generar gráficos para presentaciones o preparar informes para su publicación.

Es muy fácil trabajar con archivos CSV mediante programación en Python, y los archivos CSV se pueden procesar directamente.

Biblioteca CSV incorporada para analizar archivos CSV

La biblioteca csv está diseñada para funcionar de manera inmediata con archivos CSV generados con Excel y se adapta a una variedad de formatos CSV.
inserte la descripción de la imagen aquí

Leer archivo CSV csv

El archivo CSV se abre como un archivo de texto utilizando la función open() integrada de Python , que devuelve un objeto de archivo, que luego se pasa al lector para realizar la lectura.

# employee_birthday.txt
name,department,birthday
John,IT,November
Tom,IT,March

Lea el código de operación, cada línea devuelta por el lector es una lista de elementos, String que contiene los datos encontrados al eliminar el delimitador. La primera fila devuelta contiene nombres de columnas que se tratan de forma especial.

import csv

with open('employee_birthday.txt') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'names are {
      
      ", ".join(row)}')
            line_count += 1
        else:
            print(f'\t{
      
      row[0]} works in the {
      
      row[1]} department, and was born in {
      
      row[2]}.')
            line_count += 1
    print(f'Processed {
      
      line_count} lines.')

names are name, department, birthday
	John works in the IT department, and was born in November.
	Tom works in the IT department, and was born in March.
Processed 3 lines.

Leer archivo CSV en el diccionario csv

Además de trabajar con listas de elementos String individuales, también es posible leer datos CSV directamente en un diccionario.

import csv

with open('employee_birthday.txt', mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {
      
      ", ".join(row)}')
            line_count += 1
        print(f'\t{
      
      row["name"]} works in the {
      
      row["department"]} department, and was born in {
      
      row["birthday month"]}.')
        line_count += 1
    print(f'Processed {
      
      line_count} lines.')


Column names are name, department, birthday
	John works in the IT department, and was born in November.
	Tom works in the IT department, and was born in March.
Processed 3 lines.

Parámetro de lector CSV de Python opcional

  • delimitador especifica el carácter utilizado para separar cada campo. El valor predeterminado es una coma ( ' , ').
  • quotechar Especifica el carácter utilizado para rodear los campos que contienen delimitadores. El valor predeterminado son las comillas dobles (' " ').
  • escapechar especifica el carácter utilizado para escapar del delimitador, en caso de que no se utilicen comillas. El valor predeterminado es sin caracteres de escape.
name,address,date joined
john,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4
erica,1234 Smith Lane Hoboken NJ, 07030,March 2

Este archivo CSV contiene tres campos: nombre, dirección y fecha de unión, separados por comas. El problema es que los datos del campo de dirección también contienen una coma para representar el código postal.

Hay tres formas de manejar esto.

  • Para usar un delimitador diferente, use el parámetro opcional del delimitador para especificar el nuevo delimitador.
  • Encierre los datos entre comillas, las propiedades especiales del delimitador elegido se ignoran en las cadenas entre comillas. quotechar Se puede usar un parámetro opcional para especificar el carácter que se usará para citar.
  • Escapa el delimitador en los datos, los caracteres de escape funcionan igual que en la cadena de formato, lo que invalida la interpretación del carácter que se escapa (en este caso, el delimitador). Si se utilizan caracteres de escape, deben especificarse con el parámetro opcional escapechar.

Escribir en el archivo usando csv

Los archivos CSV se pueden escribir usando el objeto escritor y el método .write_row() .

import csv

with open('employee_file.csv', mode='w') as employee_file:
    employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    employee_writer.writerow(['John Smith', 'Accounting', 'November'])
    employee_writer.writerow(['Erica Meyers', 'IT', 'March'])

csv.QUOTE_MINIMAL significa solo cuando es necesario, por ejemplo, cuando un campo contiene el carácter de comillas o el delimitador
csv.QUOTE_ALL significa que siempre se colocan comillas alrededor de los campos.
csv.QUOTE_NONNUMERIC significa que las comillas siempre se colocan alrededor de
los campos que no se analizan como números enteros o de punto flotante.
csv.QUOTE_NONE significa que nunca se colocan comillas alrededor de los campos.

  • csv.QUOTE_MINIMAL: los objetos Writer solo citan aquellos que contienen caracteres especiales.
  • csv.QUOTE_ALL: el objeto de escritura cita todos los campos, como el delimitador de campo, el carácter entre comillas o cualquier terminador de línea de caracteres.
  • csv.QUOTE_NONNUMERIC: el objeto de escritura hace referencia a todos los campos no numéricos e indica al lector que convierta todos los campos no referenciados a tipo flotante.
  • csv.QUOTE_NONE: el objeto de escritura no cita los campos. Si no se establece escapechar, se genera un error; indica al lector que no realice un procesamiento especial en los caracteres de comillas.
John Smith,Accounting,November
Erica Meyers,IT,March

Escribir archivo CSV csv del diccionario

El parámetro DictReader es necesario al escribir un diccionario.

import csv

with open('employee_file2.csv', mode='w') as csv_file:
    fieldnames = ['emp_name', 'dept', 'birth_month']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({
    
    'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'})
    writer.writerow({
    
    'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})

Analizar archivo CSV usando la biblioteca pandas

inserte la descripción de la imagen aquí

Puede instalar la biblioteca pandas primero.

pip install pandas

pandas leer archivo CSV

# hrdata.csv
Name,Hire Date,Salary,Sick Days remaining
Graham Chapman,03/15/14,50000.00,10
John Cleese,06/01/15,65000.00,8
Eric Idle,05/12/14,45000.00,10
Terry Jones,11/01/13,70000.00,3
Terry Gilliam,08/12/14,48000.00,7
Michael Palin,05/23/13,66000.00,8

Lea el archivo csv usando pandas.

import pandas as pd
df = pd.read_csv('hrdata.csv')
print(df)
             Name Hire Date   Salary  Sick Days remaining
0  Graham Chapman  03/15/14  50000.0                   10
1     John Cleese  06/01/15  65000.0                    8
2       Eric Idle  05/12/14  45000.0                   10
3     Terry Jones  11/01/13  70000.0                    3
4   Terry Gilliam  08/12/14  48000.0                    7
5   Michael Palin  05/23/13  66000.0                    8

Aumente la columna de índice para leer el archivo csv, de modo que desaparezca el número de serie del índice.

import pandas as pd
df = pd.read_csv('hrdata.csv', index_col='Name')
print(df)
               Hire Date   Salary  Sick Days remaining
Name                                                  
Graham Chapman  03/15/14  50000.0                   10
John Cleese     06/01/15  65000.0                    8
Eric Idle       05/12/14  45000.0                   10
Terry Jones     11/01/13  70000.0                    3
Terry Gilliam   08/12/14  48000.0                    7
Michael Palin   05/23/13  66000.0                    8

Corrija el tipo de datos del campo Fecha de contratación para fechar los datos.

import pandas as pd
df = pd.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date'])
print(df)
                Hire Date   Salary  Sick Days remaining
Name                                                   
Graham Chapman 2014-03-15  50000.0                   10
John Cleese    2015-06-01  65000.0                    8
Eric Idle      2014-05-12  45000.0                   10
Terry Jones    2013-11-01  70000.0                    3
Terry Gilliam  2014-08-12  48000.0                    7
Michael Palin  2013-05-23  66000.0                    8

también se puede procesar uniformemente.

import pandas as pd
df = pd.read_csv('hrdata.csv', 
        index_col='Employee', 
        parse_dates=['Hired'], 
        header=0, 
        names=['Employee', 'Hired','Salary', 'Sick Days'])
print(df)
                    Hired   Salary  Sick Days
Employee                                     
Graham Chapman 2014-03-15  50000.0         10
John Cleese    2015-06-01  65000.0          8
Eric Idle      2014-05-12  45000.0         10
Terry Jones    2013-11-01  70000.0          3
Terry Gilliam  2014-08-12  48000.0          7
Michael Palin  2013-05-23  66000.0          8

pandas escriben en un archivo CSV

Las operaciones de escritura son tan simples como las operaciones de lectura.

import pandas as pd
df = pd.read_csv('hrdata.csv', 
        index_col='Employee', 
        parse_dates=['Hired'],
        header=0, 
        names=['Employee', 'Hired', 'Salary', 'Sick Days'])
df.to_csv('hrdata_modified.csv')

Supongo que te gusta

Origin blog.csdn.net/qq_20288327/article/details/123688215
Recomendado
Clasificación