Python CSV: Lesen und Schreiben von CSV-Dateien

In diesem Tutorial lernen wir anhand von Beispielen, wie man in Python CSV-Dateien liest und schreibt.

Ein CSV-Format (Comma Separated Values) ist eine der einfachsten und gebräuchlichsten Methoden zum Speichern von Tabellendaten. Um eine CSV-Datei darzustellen, muss sie mit der Dateierweiterung .csv gespeichert werden.

Nehmen wir ein Beispiel:

Wenn Sie die obige CSV-Datei mit einem Texteditor wie z. B. erhabenem Text öffnen, sehen Sie Folgendes:

 SN, Name, Stadt 1, Michael, New Jersey 2, Jack, Kalifornien 

Wie Sie sehen können, werden die Elemente einer CSV-Datei durch Kommas getrennt. Hier ,ist ein Trennzeichen.

Sie können jedes einzelne Zeichen gemäß Ihren Anforderungen als Trennzeichen verwenden.

Hinweis: Das CSV-Modul kann auch für andere Dateierweiterungen (z. B. .txt ) verwendet werden, sofern deren Inhalt ordnungsgemäß strukturiert ist.

Arbeiten mit CSV-Dateien in Python

Während wir die integrierte open()Funktion verwenden könnten , um mit CSV-Dateien in Python zu arbeiten, gibt es ein spezielles csvModul, das die Arbeit mit CSV-Dateien erheblich erleichtert.

Bevor wir die Methoden für das csvModul verwenden können, müssen wir das Modul zuerst importieren, indem wir:

 import csv 

Lesen von CSV-Dateien mit csv.reader ()

Um eine CSV-Datei in Python zu lesen, können wir die csv.reader()Funktion verwenden. Angenommen, wir haben eine csvDatei mit dem Namen people.csv im aktuellen Verzeichnis mit den folgenden Einträgen.

Name Alter Beruf
Jack 23 Arzt
Müller 22 Techniker

Lesen wir diese Datei mit csv.reader():

Beispiel 1: Lesen Sie CSV mit Komma-Trennzeichen

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

Ausgabe

 ('Name', 'Alter', 'Beruf') ('Jack', '23', 'Doktor') ('Miller', '22', 'Ingenieur') 

Hier haben wir die Datei people.csv im Lesemodus geöffnet mit:

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

Weitere Informationen zum Öffnen von Dateien in Python finden Sie unter: Eingabe / Ausgabe von Python-Dateien

Dann csv.reader()wird das zum Lesen der Datei verwendet, die ein iterierbares readerObjekt zurückgibt .

Das readerObjekt wird dann mithilfe einer forSchleife iteriert , um den Inhalt jeder Zeile zu drucken.

Im obigen Beispiel verwenden wir die csv.reader()Funktion im Standardmodus für CSV-Dateien mit Komma-Trennzeichen.

Die Funktion ist jedoch viel anpassbarer.

Angenommen, unsere CSV-Datei verwendet die Registerkarte als Trennzeichen. Um solche Dateien zu lesen, können wir optionale Parameter an die csv.reader()Funktion übergeben. Nehmen wir ein Beispiel.

Beispiel 2: CSV-Datei mit Tabulatortrennzeichen lesen

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

Beachten Sie den optionalen Parameter delimiter = ' 'im obigen Beispiel.

Die vollständige Syntax der csv.reader()Funktion lautet:

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

Wie Sie der Syntax entnehmen können, können wir den Dialektparameter auch an die csv.reader()Funktion übergeben. Der dialectParameter ermöglicht es uns, die Funktion flexibler zu gestalten. Weitere Informationen finden Sie unter: Lesen von CSV-Dateien in Python.

Schreiben von CSV-Dateien mit csv.writer ()

Um in eine CSV-Datei in Python zu schreiben, können wir die csv.writer()Funktion verwenden.

Die csv.writer()Funktion gibt ein writerObjekt zurück, das die Daten des Benutzers in eine begrenzte Zeichenfolge konvertiert. Diese Zeichenfolge kann später verwendet werden, um mithilfe der writerow()Funktion in CSV-Dateien zu schreiben . Nehmen wir ein Beispiel.

Beispiel 3: In eine CSV-Datei schreiben

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

Wenn wir das obige Programm ausführen, wird eine protagonist.csv- Datei mit folgendem Inhalt erstellt:

 SN, Film, Protagonist 1, Herr der Ringe, Frodo Beutlin 2, Harry Potter, Harry Potter 

Im obigen Programm haben wir die Datei im Schreibmodus geöffnet.

Dann haben wir jede Zeile als Liste übergeben. Diese Listen werden in eine begrenzte Zeichenfolge konvertiert und in die CSV-Datei geschrieben.

Beispiel 4: Schreiben mehrerer Zeilen mit Writerows ()

Wenn wir den Inhalt der zweidimensionalen Liste in eine CSV-Datei schreiben müssen, gehen wir wie folgt vor.

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

Hier liest das Programm people.csv aus dem aktuellen Verzeichnis.

Um in eine CSV-Datei zu schreiben, müssen wir die to_csv()Funktion eines DataFrame aufrufen.

 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 haben wir mit der pd.DataFrame()Methode einen DataFrame erstellt . Dann wird die to_csv()Funktion für dieses Objekt aufgerufen, um in person.csv zu schreiben .

Um mehr zu erfahren, besuchen Sie:

  • Python pandas.read_csv (offizielle Seite)
  • Python pandas.pandas.DataFrame.to_csv (offizielle Seite)

Interessante Beiträge...