Obiective:
- Înțelegerea importanței formatului CSV și a utilizării sale în prelucrarea datelor
- Familiarizarea cu biblioteca Python
csv - Învățarea unor tehnici avansate de manipulare a fișierelor CSV
Introducere
Fișierele CSV (Comma Separated Values) sunt o metodă populară de stocare a datelor într-un format text simplu. Aceste fișiere sunt folosite pe scară largă pentru schimbul de date între diferite aplicații și sisteme. În această lecție, ne vom aprofunda în lucrul cu fișiere CSV și vom învăța cum să prelucrăm datele într-un mod mai avansat.
Biblioteca csv
Python oferă biblioteca csv, care ne permite să citim și să scriem fișiere CSV într-un mod facil și eficient. Înainte de a începe să lucrăm cu fișiere CSV, trebuie să importăm biblioteca folosind comanda import csv.
import csv
Citirea fișierelor CSV
Pentru a citi un fișier CSV, putem folosi funcția csv.reader(), care ne va returna un obiect de tip iterator, ce poate fi folosit pentru a parcurge rândurile fișierului.
import csv
with open('exemplu.csv', mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.reader(csvfile)
for row in csv_reader:
print(row)
Delimitatorul și citirea fișierelor CSV
Uneori, fișierele CSV pot folosi delimitatori diferiți în loc de virgulă. Pentru a citi un astfel de fișier, trebuie să specificăm delimitatorul folosit în parametrul delimiter al funcției csv.reader().
import csv
with open('exemplu.tsv', mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.reader(csvfile, delimiter='t')
for row in csv_reader:
print(row)
Scrierea fișierelor CSV
Pentru a scrie un fișier CSV, putem folosi funcția csv.writer(), care ne va returna un obiect de tip writer, ce poate fi folosit pentru a scrie rânduri în fișier.
import csv
data = [['Nume', 'Vârstă', 'Oraș'],
['Andrei', 25, 'București'],
['Ioana', 30, 'Cluj-Napoca']]
with open('persoane.csv', mode='w', encoding='utf-8', newline='') as csvfile:
csv_writer = csv.writer(csvfile)
for row in data:
csv_writer.writerow(row)
Delimitatorul și scrierea fișierelor CSV
La fel ca în cazul citirii, putem specifica un delimitator diferit pentru scrierea fișierelor CSV, folosind parametrul delimiter al funcției csv.writer().
import csv
data = [['Nume', 'Vârstă', 'Oraș'],
['Andrei', 25, 'București'],
['Ioana', 30, 'Cluj-Napoca']]
with open('persoane.tsv', mode='w', encoding='utf-8', newline='') as csvfile:
csv_writer = csv.writer(csvfile, delimiter='t')
for row in data:
csv_writer.writerow(row)
Tehnici avansate de manipulare a fișierelor CSV
Folosirea obiectelor DictReader și DictWriter
Biblioteca csv oferă și clasele DictReader și DictWriter, care ne permit să lucrăm cu fișiere CSV folosind dicționare în loc de liste. Acest lucru poate fi util atunci când avem de-a face cu fișiere CSV mari și complexe.
import csv
with open('exemplu.csv', mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.DictReader(csvfile)
for row in csv_reader:
print(row)
Filtrarea datelor
Putem filtra datele dintr-un fișier CSV în funcție de anumite condiții, folosind construcții Python precum list comprehensions sau funcția filter().
import csv
def filtrare_vârstă(vârstă_minimă):
persoane_filtrate = []
with open('persoane.csv', mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.DictReader(csvfile)
persoane_filtrate = [row for row in csv_reader if int(row['Vârstă']) >= vârstă_minimă]
return persoane_filtrate
persoane_peste_25 = filtrare_vârstă(25)
print(persoane_peste_25)
Sortarea datelor
Putem sorta datele dintr-un fișier CSV în funcție de o anumită coloană, folosind funcția sorted() și o funcție lambda pentru a specifica cheia de sortare.
import csv
def sortare_dupa_vârstă():
persoane_sortate = []
with open('persoane.csv', mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.DictReader(csvfile)
persoane_sortate = sorted(csv_reader, key=lambda row: int(row['Vârstă']))
return persoane_sortate
persoane_sortate = sortare_dupa_vârstă()
print(persoane_sortate)
Combinarea datelor din mai multe fișiere CSV
Putem combina datele din mai multe fișiere CSV într-un singur fișier, folosind funcțiile de citire și scriere CSV pe care le-am învățat anterior.
import csv
def combină_fișiere_csv(fișiere, fișier_iesire):
with open(fișier_iesire, mode='w', encoding='utf-8', newline='') as csvfile_iesire:
csv_writer = csv.writer(csvfile_iesire)
for fișier in fișiere:
with open(fișier, mode='r', encoding='utf-8') as csvfile_intrare:
csv_reader = csv.reader(csvfile_intrare)
for row in csv_reader:
csv_writer.writerow(row)
fișiere = ['persoane1.csv', 'persoane2.csv']
combină_fișiere_csv(fișiere, 'persoane_combinate.csv')
Exerciții
-
Scrieți o funcție care primește un fișier CSV și o coloană și returnează suma valorilor din acea coloană.
-
Scrieți o funcție care primește un fișier CSV și o coloană și returnează valoarea maximă din acea coloană.
-
Scrieți o funcție care primește un fișier CSV și o coloană și returnează valoarea minimă din acea coloană.
-
Scrieți o funcție care primește un fișier CSV și o coloană și returnează media valorilor din acea coloană.
-
Scrieți o funcție care primește un fișier CSV și o coloană și returnează mediana valorilor din acea coloană.
Succes în rezolvarea exercițiilor!