Python CSV: Citiți și scrieți fișiere CSV

În acest tutorial, vom învăța cum să citim și să scriem în fișiere CSV în Python cu ajutorul exemplelor.

Un format CSV (Valori separate prin virgulă) este unul dintre cele mai simple și comune moduri de stocare a datelor tabulare. Pentru a reprezenta un fișier CSV, acesta trebuie salvat cu extensia de fișier .csv .

Să luăm un exemplu:

Dacă deschideți fișierul CSV de mai sus folosind un editor de text, cum ar fi textul sublim, veți vedea:

 SN, Nume, Oraș 1, Michael, New Jersey 2, Jack, California 

După cum puteți vedea, elementele unui fișier CSV sunt separate prin virgule. Iată ,un delimitator.

Puteți avea orice caracter ca delimitator în funcție de nevoile dvs.

Notă: Modulul csv poate fi utilizat și pentru alte extensii de fișiere (cum ar fi: .txt ), atâta timp cât conținutul lor este într-o structură adecvată.

Lucrul cu fișiere CSV în Python

Deși am putea folosi funcția încorporată open()pentru a lucra cu fișiere CSV în Python, există un csvmodul dedicat care facilitează mult lucrul cu fișiere CSV.

Înainte de a putea folosi metodele în csvmodul, trebuie să importăm modulul mai întâi folosind:

 import csv 

Citirea fișierelor CSV Utilizarea csv.reader ()

Pentru a citi un fișier CSV în Python, putem folosi csv.reader()funcția. Să presupunem că avem un csvfișier numit people.csv în directorul curent cu următoarele intrări.

Nume Vârstă Profesie
Jack 23 Doctor
Miller 22 Inginer

Să citim acest fișier folosind csv.reader():

Exemplul 1: Citiți CSV având Comma Delimiter

 import csv with open('people.csv', 'r') as file: reader = csv.reader(file) for row in reader: print(row) 

Ieșire

 („Nume”, „Vârstă”, „Profesie”) („Jack”, „23”, „Doctor”) („Miller”, „22”, „Inginer”) 

Aici am deschis fișierul people.csv în modul de citire folosind:

 with open('people.csv', 'r') as file:… 

Pentru a afla mai multe despre deschiderea fișierelor în Python, vizitați: Intrare / ieșire fișier Python

Apoi, csv.reader()este folosit pentru a citi fișierul, care returnează un readerobiect iterabil .

readerObiectul este apoi iterată folosind o forbuclă pentru a imprima conținutul fiecărui rând.

În exemplul de mai sus, folosim csv.reader()funcția în modul implicit pentru fișierele CSV care au delimitator de virgule.

Cu toate acestea, funcția este mult mai personalizabilă.

Să presupunem că fișierul nostru CSV folosea fila ca delimitator. Pentru a citi astfel de fișiere, putem transmite parametrii opționali csv.reader()funcției. Să luăm un exemplu.

Exemplul 2: Citiți fișierul CSV având tab Delimiter

 import csv with open('people.csv', 'r',) as file: reader = csv.reader(file, delimiter = ' ') for row in reader: print(row) 

Observați parametrul opțional delimiter = ' 'din exemplul de mai sus.

Sintaxa completă a csv.reader()funcției este:

 csv.reader(csvfile, dialect='excel', **optional_parameters) 

După cum puteți vedea din sintaxă, putem transmite și parametrul dialect csv.reader()funcției. dialectParametrul ne permite să facem funcția mai flexibilă. Pentru a afla mai multe, vizitați: Citirea fișierelor CSV în Python.

Scrierea fișierelor CSV Utilizarea csv.writer ()

Pentru a scrie într-un fișier CSV în Python, putem folosi csv.writer()funcția.

csv.writer()Funcția returnează un writerobiect care convertește datele utilizatorului într - un șir delimitat. Acest șir poate fi folosit ulterior pentru a scrie în fișiere CSV folosind writerow()funcția. Să luăm un exemplu.

Exemplul 3: scrieți într-un fișier CSV

 import csv with open('protagonist.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(("SN", "Movie", "Protagonist")) writer.writerow((1, "Lord of the Rings", "Frodo Baggins")) writer.writerow((2, "Harry Potter", "Harry Potter")) 

Când rulăm programul de mai sus, se creează un fișier protagonist.csv cu următorul conținut:

 SN, Film, Protagonist 1, Stăpânul inelelor, Frodo Baggins 2, Harry Potter, Harry Potter 

În programul de mai sus, am deschis fișierul în modul de scriere.

Apoi, am trecut fiecare rând ca o listă. Aceste liste sunt convertite într-un șir delimitat și scrise în fișierul CSV.

Exemplul 4: Scrierea mai multor rânduri cu writerows ()

Dacă trebuie să scriem conținutul listei bidimensionale într-un fișier CSV, iată cum o putem face.

 import csv csv_rowlist = (("SN", "Movie", "Protagonist"), (1, "Lord of the Rings", "Frodo Baggins"), (2, "Harry Potter", "Harry Potter")) with open('protagonist.csv', 'w') as file: writer = csv.writer(file) writer.writerows(csv_rowlist) 

The output of the program is the same as in Example 3.

Here, our 2-dimensional list is passed to the writer.writerows() method to write the content of the list to the CSV file.

Example 5: Writing to a CSV File with Tab Delimiter

 import csv with open('protagonist.csv', 'w') as file: writer = csv.writer(file, delimiter = ' ') writer.writerow(("SN", "Movie", "Protagonist")) writer.writerow((1, "Lord of the Rings", "Frodo Baggins")) writer.writerow((2, "Harry Potter", "Harry Potter")) 

Notice the optional parameter delimiter = ' ' in the csv.writer() function.

The complete syntax of the csv.writer() function is:

 csv.writer(csvfile, dialect='excel', **optional_parameters) 

Similar to csv.reader(), you can also pass dialect parameter the csv.writer() function to make the function much more customizable. To learn more, visit: Writing CSV files in Python

Python csv.DictReader() Class

The objects of a csv.DictReader() class can be used to read a CSV file as a dictionary.

Example 6: Python csv.DictReader()

Suppose we have the same file people.csv as in Example 1.

Name Age Profession
Jack 23 Doctor
Miller 22 Engineer

Let's see how csv.DictReader() can be used.

 import csv with open("people.csv", 'r') as file: csv_file = csv.DictReader(file) for row in csv_file: print(dict(row)) 

Output

 ('Name': 'Jack', ' Age': ' 23', ' Profession': ' Doctor') ('Name': 'Miller', ' Age': ' 22', ' Profession': ' Engineer') 

As we can see, the entries of the first row are the dictionary keys. And, the entries in the other rows are the dictionary values.

Here, csv_file is a csv.DictReader() object. The object can be iterated over using a for loop. The csv.DictReader() returned an OrderedDict type for each row. That's why we used dict() to convert each row to a dictionary.

Notice that, we have explicitly used the dict() method to create dictionaries inside the for loop.

 print(dict(row)) 

Note: Starting from Python 3.8, csv.DictReader() returns a dictionary for each row, and we do not need to use dict() explicitly.

The full syntax of the csv.DictReader() class is:

 csv.DictReader(file, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds) 

To learn more about it in detail, visit: Python csv.DictReader() class

Python csv.DictWriter() Class

The objects of csv.DictWriter() class can be used to write to a CSV file from a Python dictionary.

The minimal syntax of the csv.DictWriter() class is:

 csv.DictWriter(file, fieldnames) 

Here,

  • file - CSV file where we want to write to
  • fieldnames - a list object which should contain the column headers specifying the order in which data should be written in the CSV file

Example 7: Python csv.DictWriter()

 import csv with open('players.csv', 'w', newline='') as file: fieldnames = ('player_name', 'fide_rating') writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() writer.writerow(('player_name': 'Magnus Carlsen', 'fide_rating': 2870)) writer.writerow(('player_name': 'Fabiano Caruana', 'fide_rating': 2822)) writer.writerow(('player_name': 'Ding Liren', 'fide_rating': 2801)) 

The program creates a players.csv file with the following entries:

 player_name,fide_rating Magnus Carlsen,2870 Fabiano Caruana,2822 Ding Liren,2801 

The full syntax of the csv.DictWriter() class is:

 csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds) 

To learn more about it in detail, visit: Python csv.DictWriter() class

Using the Pandas library to Handle CSV files

Pandas is a popular data science library in Python for data manipulation and analysis. If we are working with huge chunks of data, it's better to use pandas to handle CSV files for ease and efficiency.

Before we can use pandas, we need to install it. To learn more, visit: How to install Pandas?

Once we install it, we can import Pandas as:

 import pandas as pd 

To read the CSV file using pandas, we can use the read_csv() function.

 import pandas as pd pd.read_csv("people.csv") 

Aici, programul citește people.csv din directorul curent.

Pentru a scrie într-un fișier CSV, trebuie să apelăm to_csv()funcția unui DataFrame.

 import pandas as pd # creating a data frame df = pd.DataFrame((('Jack', 24), ('Rose', 22)), columns = ('Name', 'Age')) # writing data frame to a CSV file df.to_csv('person.csv') 

Aici, am creat un DataFrame folosind pd.DataFrame()metoda. Apoi, to_csv()funcția pentru acest obiect este numită, de a scrie în person.csv .

Pentru a afla mai multe, vizitați:

  • Python pandas.read_csv (site-ul oficial)
  • Python pandas.pandas.DataFrame.to_csv (site-ul oficial)

Articole interesante...