logo

Treballant amb fitxers csv a Python

A Fitxer CSV (valors separats per comes). és un fitxer de text senzill on cada línia representa un registre de dades i els camps de cada registre estan separats per comes. S'utilitza habitualment per a fulls de càlcul i bases de dades per la seva senzillesa i llegibilitat.

A continuació es mostren algunes operacions que realitzem mentre treballem amb fitxers CSV de Python a Python

Llegint un fitxer CSV

La lectura d'un fitxer CSV es fa mitjançant l'objecte lector. El fitxer CSV s'obre com a fitxer de text amb la funció open() integrada de Python que retorna un objecte de fitxer. En aquest exemple, primer obrim el fitxer CSV en mode LECTURA, l'objecte del fitxer es converteix en objecte csv.reader i es produeix una altra operació. El codi i l'explicació detallada es donen a continuació.



Python
import csv filename = 'aapl.csv' # File name fields = [] # Column names rows = [] # Data rows with open(filename 'r') as csvfile: csvreader = csv.reader(csvfile) # Reader object fields = next(csvreader) # Read header for row in csvreader: # Read rows rows.append(row) print('Total no. of rows: %d' % csvreader.line_num) # Row count print('Field names are: ' + ' '.join(fields)) print('nFirst 5 rows are:n') for row in rows[:5]: for col in row: print('%10s' % col end=' ') print('n') 

Sortida

Treballant amb fitxers csv a Python

L'exemple anterior utilitza un fitxer CSV aapl.csv que es pot descarregar des aquí .

Explicació:

  • amb obert (...) obre el fitxer CSV en mode de lectura amb seguretat mitjançant un gestor de context.
  • csv.reader (fitxer csv) converteix el fitxer en un objecte lector CSV.
  • següent (csvreader) extreu la primera fila com a capçaleres de columna.
  • Bucle a través csvreader per afegir cada fila (com una llista) a les files.
  • Imprimeix les capçaleres de files totals i les 5 primeres files de dades en una vista amb format.

Llegir fitxers CSV en un diccionari amb csv

Podem llegir un fitxer CSV en un diccionari mitjançant el mòdul csv de Python i la classe csv.DictReader. Aquí teniu un exemple:

Suposem que tenim un empleats.csv fitxer i el contingut que hi ha dins serà:

nomdepartamentaniversari_mes
John SmithHRJuliol
Alice Johnson a l'octubre
Bob WilliamsFinances gener

Exemple: Això llegeix cada fila com un diccionari (les capçaleres com a claus) i després les afegeix a la llista .

Python
import csv with open('employees.csv' mode='r') as file: csv_reader = csv.DictReader(file) # Create DictReader data_list = [] # List to store dictionaries for row in csv_reader: data_list.append(row) for data in data_list: print(data) 

Sortida:

{'name': 'John Smith' 'department': 'HR' 'birthday_month': 'july'}
{'name': 'Alice Johnson' 'department': 'IT' 'birthday_month': 'octubre'}
{'name': 'Bob Williams' 'department': 'Finances' 'birthday_month': 'gener'}

Explicació:

ddl vs dml
  • amb obert (...) obre el fitxer mitjançant un gestor de context.
  • csv.DictReader(fitxer) llegeix cada fila com un diccionari utilitzant les capçaleres com a claus.
  • data_list.append(fila) emmagatzema cada diccionari en una llista.

Escriptura en un fitxer CSV

Per escriure en un fitxer CSV primer obrim el fitxer CSV en mode ESCRITURA. L'objecte fitxer es converteix en objecte csv.writer i es fan més operacions. El codi i l'explicació detallada es donen a continuació.

Python
import csv # Define header and data rows fields = ['Name' 'Branch' 'Year' 'CGPA'] rows = [ ['Nikhil' 'COE' '2' '9.0'] ['Sanchit' 'COE' '2' '9.1'] ['Aditya' 'IT' '2' '9.3'] ['Sagar' 'SE' '1' '9.5'] ['Prateek' 'MCE' '3' '7.8'] ['Sahil' 'EP' '2' '9.1'] ] filename = 'university_records.csv' with open(filename 'w') as csvfile: csvwriter = csv.writer(csvfile) # Create writer object csvwriter.writerow(fields) # Write header csvwriter.writerows(rows) # Write multiple rows 

Explicació:

  • camps defineix les capçaleres de columna i les files conté les dades com una llista de llistes.
  • amb obert(... 'w') obre el fitxer en mode d'escriptura mitjançant un gestor de context.
  • csv.writer (fitxer csv) crea un objecte d'escriptor per escriure al CSV.
  • escriure fila (camps) escriu la fila de capçalera al fitxer.
  • escriviu files (files) escriu totes les files de dades al CSV alhora.

Escriure un diccionari en un fitxer CSV

Per escriure un diccionari en un fitxer CSV, l'objecte fitxer (csvfile) es converteix en un objecte DictWriter. A continuació es mostra un exemple detallat amb explicació i codi.

Python
# importing the csv module import csv # my data rows as dictionary objects mydict = [{'branch': 'COE' 'cgpa': '9.0' 'name': 'Nikhil' 'year': '2'} {'branch': 'COE' 'cgpa': '9.1' 'name': 'Sanchit' 'year': '2'} {'branch': 'IT' 'cgpa': '9.3' 'name': 'Aditya' 'year': '2'} {'branch': 'SE' 'cgpa': '9.5' 'name': 'Sagar' 'year': '1'} {'branch': 'MCE' 'cgpa': '7.8' 'name': 'Prateek' 'year': '3'} {'branch': 'EP' 'cgpa': '9.1' 'name': 'Sahil' 'year': '2'}] # field names fields = ['name' 'branch' 'year' 'cgpa'] # name of csv file filename = 'university_records.csv' # writing to csv file with open(filename 'w') as csvfile: # creating a csv dict writer object writer = csv.DictWriter(csvfile fieldnames=fields) # writing headers (field names) writer.writeheader() # writing data rows writer.writerows(mydict) 

Sortida

Treballant amb fitxers csv a Pythonfitxer csv

Tingueu en compte que un fitxer CSV té aquest aspecte en text sense format:

expedient universitari' loading='lazy' title=expedient universitari

Explicació:

  • amb obert (...) obre el fitxer amb seguretat mitjançant un gestor de context.
  • csv.DictWriter(... ) mapeja les claus del diccionari a les columnes CSV.
  • capçalera d'escriptura () escriu capçaleres de columnes.
  • writerows (mydict) escriu tots els diccionaris com a files CSV.

Llegint fitxers CSV amb pandas

Podem llegir a Python CSV fitxers amb Pandas utilitzant pandas.read_csv() funció. Aquí teniu un exemple:

Suposem que tenim un fitxer employees.csv i el seu contingut serà:

nomdepartamentaniversari_mes
John SmithHRJuliol
Alice Johnson a l'octubre
Bob WilliamsFinances gener

En aquest exemple, pd.read_csv() llegeix el fitxer CSV en un Pandas DataFrame. El DataFrame resultant es pot utilitzar per a diverses tasques de manipulació i anàlisi de dades.

Python
import pandas as pd # Read the CSV file into a DataFrame df = pd.read_csv('employees.csv') # Display the DataFrame print(df) 

Sortida:

nom departament aniversari_mes
0 John Smith HR Juliol
1 Alice Johnson IT d'octubre
2 Bob Williams Finances gener

Podem accedir a dades de filtratge de columnes específiques i realitzar diverses operacions mitjançant la funcionalitat Pandas DataFrame. Per exemple, si volem accedir a la columna 'nom' podem utilitzar df['nom'].

Python
# Access the 'name' column names = df['name'] print(names) 

Sortida :

0 John Smith
1 Alice Johnson
2 Bob Williams
Nom: nom dtype: objecte

Escriptura de fitxers CSV amb Pandas

Podem utilitzar Pandas per escriure fitxers CSV. Es pot fer utilitzant pd.DataFrame() funció. En aquest exemple el Pandes La biblioteca s'utilitza per convertir una llista de diccionaris (mydict) en un DataFrame que representa dades tabulars. A continuació, el DataFrame s'escriu en un fitxer CSV de Python anomenat "output.csv" mitjançant el mètode to_csv, creant un fitxer de dades estructurat i llegible per a una anàlisi o compartició posterior.

variable javascript global
Python
import pandas as pd mydict = [ {'branch': 'COE' 'cgpa': '9.0' 'name': 'Nikhil' 'year': '2'} {'branch': 'COE' 'cgpa': '9.1' 'name': 'Sanchit' 'year': '2'} {'branch': 'IT' 'cgpa': '9.3' 'name': 'Aditya' 'year': '2'} {'branch': 'SE' 'cgpa': '9.5' 'name': 'Sagar' 'year': '1'} {'branch': 'MCE' 'cgpa': '7.8' 'name': 'Prateek' 'year': '3'} {'branch': 'EP' 'cgpa': '9.1' 'name': 'Sahil' 'year': '2'} ] # Create a DataFrame from the list of dictionaries df = pd.DataFrame(mydict) # Write the DataFrame to a CSV file df.to_csv('output.csv' index=False) 

Fitxer CSV de sortida:

brancacgpanameyear
COE9.0Nikhil2
COE9.1Sanchit2
IT9.3Aditya2
SE9.5Sagar1
MCE7.8Prateek3
EP9.1Sahil2

Emmagatzematge de correus electrònics en fitxers CSV

Comencem important el mòdul csv i l'utilitzem per emmagatzemar noms i correus electrònics com a valors separats per comes. Utilitzant la funció open() creem un fitxer CSV i després escrivim cada fila amb un objecte d'escriptor amb columnes separades per a noms i correus electrònics.

Python
# importing the csv module import csv # field names fields = ['Name' 'Email'] # data rows of csv file rows = [ ['Nikhil' '[email protected]'] ['Sanchit' '[email protected]'] ['Aditya' '[email protected]'] ['Sagar' '[email protected]'] ['Prateek' '[email protected]'] ['Sahil' '[email protected]']] # name of csv file filename = 'email_records.csv' # writing to csv file with open(filename 'w') as csvfile: # creating a csv writer object csvwriter = csv.writer(csvfile) # writing the fields csvwriter.writerow(fields) # writing the data rows csvwriter.writerows(rows) 

Sortida:

Correus electrònics en csv' loading='lazy' title=Correus electrònics en csv Crea un qüestionari