Python CSV: Läs och skriv CSV-filer

I denna handledning lär vi oss att läsa och skriva till CSV-filer i Python med hjälp av exempel.

Ett CSV-format (Comma Separated Values) är ett av de enklaste och vanligaste sätten att lagra tabelldata. För att representera en CSV-fil måste den sparas med .csv- filtillägget.

Låt oss ta ett exempel:

Om du öppnar ovanstående CSV-fil med en textredigerare som sublim text ser du:

 SN, Namn, Stad 1, Michael, New Jersey 2, Jack, Kalifornien 

Som du kan se separeras elementen i en CSV-fil med kommatecken. Här ,är en avgränsare.

Du kan ha valfritt tecken som avgränsare enligt dina behov.

Obs! Csv-modulen kan också användas för andra filtillägg (som: .txt ) så länge innehållet är i rätt struktur.

Arbeta med CSV-filer i Python

Medan vi kunde använda den inbyggda open()funktionen för att arbeta med CSV-filer i Python finns det en dedikerad csvmodul som gör det mycket enklare att arbeta med CSV-filer.

Innan vi kan använda metoderna till csvmodulen måste vi importera modulen först med:

 import csv 

Läsa CSV-filer med csv.reader ()

För att läsa en CSV-fil i Python kan vi använda csv.reader()funktionen. Antag att vi har en csvfil med namnet people.csv i den aktuella katalogen med följande poster.

namn Ålder Yrke
Jack 23 Läkare
Mjölnare 22 Ingenjör

Låt oss läsa den här filen med csv.reader():

Exempel 1: Läs CSV med kommaavgränsare

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

Produktion

 ('Namn', 'Ålder', 'Yrke') ('Jack', '23', 'Läkare') ('Miller', '22', 'Ingenjör') 

Här har vi öppnat people.csv- filen i läsläge med:

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

För att lära dig mer om att öppna filer i Python, besök: Python File Input / Output

Sedan används den csv.reader()för att läsa filen, som returnerar ett iterabelt readerobjekt.

Det readerobjektet därefter itereras med användning av en forslinga för att skriva ut innehållet i varje rad.

I exemplet ovan använder vi csv.reader()funktionen i standardläge för CSV-filer med kommaavgränsare.

Funktionen är dock mycket mer anpassningsbar.

Antag att vår CSV-fil använde fliken som en avgränsare. För att läsa sådana filer kan vi skicka valfria parametrar till csv.reader()funktionen. Låt oss ta ett exempel.

Exempel 2: Läs CSV-fil med tabbavgränsare

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

Lägg märke till den valfria parametern delimiter = ' 'i exemplet ovan.

csv.reader()Funktionens fullständiga syntax är:

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

Som du kan se från syntaxen kan vi också överföra dialektparametern till csv.reader()funktionen. Den dialectparameter tillåter oss att göra funktionen mer flexibel. För att lära dig mer, besök: Läsa CSV-filer i Python.

Skriva CSV-filer med csv.writer ()

För att skriva till en CSV-fil i Python kan vi använda csv.writer()funktionen.

Den csv.writer()returnerar en writerobjekt som omvandlar användarens data till en avgränsad sträng. Denna sträng kan senare användas för att skriva till CSV-filer med writerow()funktionen. Låt oss ta ett exempel.

Exempel 3: Skriv till 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ör ovanstående program skapas en protagonist.csv- fil med följande innehåll:

 SN, Film, Protagonist 1, Ringenes Lord, Frodo Baggins 2, Harry Potter, Harry Potter 

I ovanstående program har vi öppnat filen i skrivläge.

Sedan har vi passerat varje rad som en lista. Dessa listor konverteras till en avgränsad sträng och skrivs in i CSV-filen.

Exempel 4: Skriva flera rader med writerows ()

Om vi ​​behöver skriva innehållet i den tvådimensionella listan till en CSV-fil, så här kan vi göra 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 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") 

Här läser programmet people.csv från den aktuella katalogen.

För att skriva till en CSV-fil måste vi anropa to_csv()funktionen för 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') 

Här har vi skapat en DataFrame med pd.DataFrame()metoden. Sedan to_csv()kallas funktionen för det här objektet, att skriva till person.csv .

För att lära dig mer, besök:

  • Python pandas.read_csv (officiell webbplats)
  • Python pandas.pandas.DataFrame.to_csv (officiell webbplats)

Intressanta artiklar...