Python CSV: lees en schrijf CSV-bestanden

In deze tutorial zullen we met behulp van voorbeelden leren hoe we CSV-bestanden in Python kunnen lezen en erin kunnen schrijven.

Een CSV-indeling (Comma Separated Values) is een van de meest eenvoudige en gebruikelijke manieren om tabelgegevens op te slaan. Om een ​​CSV-bestand weer te geven, moet het worden opgeslagen met de .csv- bestandsextensie.

Laten we een voorbeeld nemen:

Als u het bovenstaande CSV-bestand opent met een teksteditor zoals sublieme tekst, ziet u:

 SN, naam, stad 1, Michael, New Jersey 2, Jack, Californië 

Zoals u kunt zien, worden de elementen van een CSV-bestand gescheiden door komma's. Hier ,is een scheidingsteken.

U kunt elk willekeurig teken als scheidingsteken hebben, afhankelijk van uw behoeften.

Opmerking: de csv-module kan ook worden gebruikt voor andere bestandsextensies (zoals: .txt ), zolang de inhoud de juiste structuur heeft.

Werken met CSV-bestanden in Python

Hoewel we de ingebouwde open()functie zouden kunnen gebruiken om met CSV-bestanden in Python te werken, is er een speciale csvmodule die het werken met CSV-bestanden veel gemakkelijker maakt.

Voordat we de methoden voor de csvmodule kunnen gebruiken , moeten we de module eerst importeren met behulp van:

 import csv 

CSV-bestanden lezen met csv.reader ()

Om een ​​CSV-bestand in Python te lezen, kunnen we de csv.reader()functie gebruiken. Stel dat we een csvbestand met de naam people.csv in de huidige directory hebben met de volgende vermeldingen.

Naam Leeftijd Beroep
Jack 23 Dokter
Molenaar 22 Ingenieur

Laten we dit bestand lezen met csv.reader():

Voorbeeld 1: CSV lezen met komma-scheidingsteken

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

Uitvoer

 ('Naam', 'Leeftijd', 'Beroep') ('Jack', '23', 'Doctor') ('Miller', '22', 'Ingenieur') 

Hier hebben we het bestand people.csv in leesmodus geopend met behulp van:

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

Ga voor meer informatie over het openen van bestanden in Python naar: Python File Input / Output

Vervolgens wordt de csv.reader()gebruikt om het bestand te lezen, dat een itereerbaar readerobject retourneert .

Het readerobject wordt vervolgens herhaald met behulp van een forlus om de inhoud van elke rij af te drukken.

In het bovenstaande voorbeeld gebruiken we de csv.reader()functie in de standaardmodus voor CSV-bestanden met een komma-scheidingsteken.

De functie is echter veel meer aanpasbaar.

Stel dat ons CSV-bestand tab als scheidingsteken gebruikte. Om dergelijke bestanden te lezen, kunnen we optionele parameters aan de csv.reader()functie doorgeven . Laten we een voorbeeld nemen.

Voorbeeld 2: CSV-bestand lezen met tabscheidingsteken

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

Let op de optionele parameter delimiter = ' 'in het bovenstaande voorbeeld.

De volledige syntaxis van de csv.reader()functie is:

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

Zoals je kunt zien aan de syntaxis, kunnen we ook de dialectparameter aan de csv.reader()functie doorgeven . Met de dialectparameter kunnen we de functie flexibeler maken. Ga voor meer informatie naar: CSV-bestanden lezen in Python.

CSV-bestanden schrijven met csv.writer ()

Om naar een CSV-bestand in Python te schrijven, kunnen we de csv.writer()functie gebruiken.

De csv.writer()functie retourneert een writerobject dat de gegevens van de gebruiker omzet in een tekenreeks met scheidingstekens. Deze tekenreeks kan later worden gebruikt om met de writerow()functie naar CSV-bestanden te schrijven . Laten we een voorbeeld nemen.

Voorbeeld 3: schrijf naar een CSV-bestand

 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")) 

Wanneer we het bovenstaande programma uitvoeren, wordt een protagonist.csv- bestand gemaakt met de volgende inhoud:

 SN, film, hoofdrolspeler 1, Lord of the Rings, Frodo Baggins 2, Harry Potter, Harry Potter 

In het bovenstaande programma hebben we het bestand in schrijfmodus geopend.

Vervolgens hebben we elke rij als een lijst doorgegeven. Deze lijsten worden geconverteerd naar een tekenreeks met scheidingstekens en naar het CSV-bestand geschreven.

Voorbeeld 4: Meerdere rijen schrijven met writerows ()

Als we de inhoud van de tweedimensionale lijst naar een CSV-bestand moeten schrijven, kunnen we dat als volgt doen.

 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) 

De output van het programma is hetzelfde als in Voorbeeld 3 .

Hier wordt onze tweedimensionale lijst doorgegeven aan de writer.writerows()methode om de inhoud van de lijst naar het CSV-bestand te schrijven.

Voorbeeld 5: schrijven naar een CSV-bestand met tabscheidingsteken

 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")) 

Let op de optionele parameter delimiter = ' 'in de csv.writer()functie.

De volledige syntaxis van de csv.writer()functie is:

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

Net als bij csv.reader(), kunt u ook de dialectparameter de csv.writer()functie doorgeven om de functie veel meer aanpasbaar te maken. Ga voor meer informatie naar: CSV-bestanden schrijven in Python

Python csv.DictReader () Klasse

De objecten van een csv.DictReader()klasse kunnen worden gebruikt om een ​​CSV-bestand als woordenboek te lezen.

Voorbeeld 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") 

Hier leest het programma people.csv uit de huidige directory.

Om naar een CSV-bestand te schrijven, moeten we de to_csv()functie van een DataFrame aanroepen.

 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') 

Hier hebben we een DataFrame gemaakt met behulp van de pd.DataFrame()methode. Vervolgens wordt de to_csv()functie voor dit object aangeroepen om in person.csv te schrijven .

Ga voor meer informatie naar:

  • Python pandas.read_csv (officiële site)
  • Python pandas.pandas.DataFrame.to_csv (officiële site)

Interessante artikelen...