Treballant amb fitxers csv a Python

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  (  '  n  First 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ó:

  • 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 universitariexpedient 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.

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 csvCorreus electrònics en csv Crea un qüestionari