I denne vejledning lærer vi at læse og skrive til CSV-filer i Python ved hjælp af eksempler.
Et CSV-format (Comma Separated Values) er en af de mest enkle og almindelige måder at gemme tabeldata på. For at repræsentere en CSV-fil skal den gemmes med .csv -filtypen.
Lad os tage et eksempel:
Hvis du åbner ovenstående CSV-fil ved hjælp af en teksteditor som f.eks. Sublim tekst, vil du se:
SN, Navn, By 1, Michael, New Jersey 2, Jack, Californien
Som du kan se, adskilles elementerne i en CSV-fil med kommaer. Her ,
er en afgrænser.
Du kan have et hvilket som helst enkelt tegn som din afgrænser efter dine behov.
Bemærk: Csv-modulet kan også bruges til andre filtypenavne (som: .txt ), så længe deres indhold er i korrekt struktur.
Arbejde med CSV-filer i Python
Mens vi kunne bruge den indbyggede open()
funktion til at arbejde med CSV-filer i Python, er der et dedikeret csv
modul, der gør arbejdet med CSV-filer meget lettere.
Før vi kan bruge metoderne til csv
modulet, skal vi først importere modulet ved hjælp af:
import csv
Læsning af CSV-filer ved hjælp af csv.reader ()
For at læse en CSV-fil i Python kan vi bruge csv.reader()
funktionen. Antag, at vi har en csv
fil med navnet people.csv i den aktuelle mappe med følgende poster.
Navn | Alder | Erhverv |
Jack | 23 | Læge |
Miller | 22 | Ingeniør |
Lad os læse denne fil ved hjælp af csv.reader()
:
Eksempel 1: Læs CSV med kommaafgrænser
import csv with open('people.csv', 'r') as file: reader = csv.reader(file) for row in reader: print(row)
Produktion
('Navn', 'Alder', 'Profession') ('Jack', '23', 'Doctor') ('Miller', '22', 'Engineer')
Her har vi åbnet filen people.csv i læsningstilstand ved hjælp af:
with open('people.csv', 'r') as file:…
For at lære mere om åbning af filer i Python, besøg: Python File Input / Output
Derefter csv.reader()
bruges den til at læse filen, som returnerer et iterabelt reader
objekt.
Den reader
Objektet derefter gentages ved hjælp af en for
løkke til at udskrive indholdet af hver række.
I ovenstående eksempel bruger vi csv.reader()
funktionen i standardtilstand til CSV-filer, der har kommaafgrænser.
Funktionen er dog meget mere tilpasselig.
Antag, at vores CSV-fil brugte fanen som en afgrænser. For at læse sådanne filer kan vi videregive valgfri parametre til csv.reader()
funktionen. Lad os tage et eksempel.
Eksempel 2: Læs CSV-fil med tabulatorafgrænser
import csv with open('people.csv', 'r',) as file: reader = csv.reader(file, delimiter = ' ') for row in reader: print(row)
Bemærk den valgfri parameter delimiter = ' '
i ovenstående eksempel.
Funktionens komplette syntaks csv.reader()
er:
csv.reader(csvfile, dialect='excel', **optional_parameters)
Som du kan se fra syntaksen, kan vi også overføre dialektparameteren til csv.reader()
funktionen. Den dialect
parameter giver os mulighed for at gøre funktionen mere fleksibel. For at lære mere, besøg: Læsning af CSV-filer i Python.
Skrivning af CSV-filer ved hjælp af csv.writer ()
For at skrive til en CSV-fil i Python kan vi bruge csv.writer()
funktionen.
Den csv.writer()
funktion returnerer en writer
genstand, der konverterer brugerens data i en afgrænset streng. Denne streng kan senere bruges til at skrive til CSV-filer ved hjælp af writerow()
funktionen. Lad os tage et eksempel.
Eksempel 3: Skriv til en CSV-fil
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"))
Når vi kører ovenstående program, oprettes en protagonist.csv- fil med følgende indhold:
SN, Film, Hovedperson 1, Ringenes Herre, Frodo Baggins 2, Harry Potter, Harry Potter
I ovenstående program har vi åbnet filen i skrivetilstand.
Derefter har vi bestået hver række som en liste. Disse lister konverteres til en afgrænset streng og skrives ind i CSV-filen.
Eksempel 4: Skrivning af flere rækker med writerows ()
Hvis vi har brug for at skrive indholdet af den 2-dimensionelle liste til en CSV-fil, kan vi her gøre det.
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 tofieldnames
- alist
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")
Her læser programmet people.csv fra den aktuelle mappe.
For at skrive til en CSV-fil skal vi kalde to_csv()
funktionen til en 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')
Her har vi oprettet en DataFrame ved hjælp af pd.DataFrame()
metoden. Derefter to_csv()
kaldes funktionen til dette objekt, at skrive til person.csv .
For at lære mere, besøg:
- Python pandas.read_csv (officielt websted)
- Python pandas.pandas.DataFrame.to_csv (officielt websted)