Python CSV: lasiet un rakstiet CSV failus

Šajā apmācībā mēs uzzināsim, kā ar piemēru palīdzību lasīt un ierakstīt CSV failos Python.

CSV (Comma Separated Values) formāts ir viens no vienkāršākajiem un izplatītākajiem veidiem, kā saglabāt tabulas datus. Lai attēlotu CSV failu, tas jāsaglabā ar .csv faila paplašinājumu.

Ņemsim piemēru:

Atverot iepriekš minēto CSV failu, izmantojot teksta redaktoru, piemēram, cildenu tekstu, jūs redzēsiet:

 SN, nosaukums, 1. pilsēta, Maikls, Ņūdžersija 2, Džeks, Kalifornija 

Kā redzat, CSV faila elementi tiek atdalīti ar komatiem. Šeit ,ir norobežotājs.

Kā norobežotājs jums var būt jebkura atsevišķa rakstzīme atbilstoši jūsu vajadzībām.

Piezīme: csv moduli var izmantot arī citiem failu paplašinājumiem (piemēram: .txt ), ja vien to saturs ir pareizā struktūrā.

Darbs ar CSV failiem Python

Lai gan mēs varētu izmantot iebūvēto open()funkciju darbam ar CSV failiem Python, ir īpašs csvmodulis, kas ievērojami atvieglo darbu ar CSV failiem.

Lai varētu izmantot metodes csvmodulī, vispirms ir jāimportē modulis, izmantojot:

 import csv 

CSV failu lasīšana, izmantojot csv.reader ()

Lai lasītu CSV failu Python, mēs varam izmantot csv.reader()funkciju. Pieņemsim , ka pašreizējā direktorijā mums ir csvfails people.csv ar šādiem ierakstiem.

Nosaukums Vecums Profesija
Džeks 23 Ārsts
Millers 22 Inženieris

Lasīsim šo failu, izmantojot csv.reader():

1. piemērs: lasiet CSV ar komatu atdalītāju

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

Rezultāts

 ('Vārds', 'Vecums', 'Profesija') ('Džeks', '23', 'Ārsts') ('Millers', '22', 'Inženieris') 

Šeit mēs esam atvēruši failu people.csv lasīšanas režīmā, izmantojot:

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

Lai uzzinātu vairāk par failu atvēršanu Python, apmeklējiet vietni: Python File Input / Output

Pēc tam csv.reader()tiek izmantots faila nolasīšanai, kas atgriež iterējamu readerobjektu.

Pēc tam readerobjekts tiek atkārtots, izmantojot forcilpu, lai izdrukātu katras rindas saturu.

Iepriekš minētajā piemērā csv.reader()CSV failiem ar komatu atdalītāju mēs izmantojam funkciju noklusējuma režīmā.

Tomēr funkcija ir daudz pielāgojamāka.

Pieņemsim, ka mūsu CSV fails kā atdalītāju izmantoja cilni . Lai lasītu šādus failus, mēs varam nodot papildu parametrus csv.reader()funkcijai. Ņemsim piemēru.

2. piemērs: lasiet CSV failu, izmantojot cilnes atdalītāju

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

Ievērojiet izvēles parametru delimiter = ' 'iepriekš minētajā piemērā.

Funkcijas pilnīga sintakse csv.reader()ir:

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

Kā redzams no sintakses, funkcijai mēs varam nodot arī dialekta parametru csv.reader(). Šis dialectparametrs ļauj mums padarīt funkciju elastīgāku. Lai uzzinātu vairāk, apmeklējiet: CSV failu lasīšana Python.

CSV failu rakstīšana, izmantojot csv.writer ()

Lai rakstītu uz CSV failu Python, mēs varam izmantot csv.writer()funkciju.

csv.writer()Funkcija atgriež writerobjektu, kas pārvērš lietotāja datus uz norobežotu virkni. Šo virkni vēlāk var izmantot, lai ierakstītu CSV failos, izmantojot writerow()funkciju. Ņemsim piemēru.

3. piemērs: rakstīšana uz CSV failu

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

Palaižot iepriekš minēto programmu, tiek izveidots protagonist.csv fails ar šādu saturu:

 SN, filma, 1. varonis, Gredzenu pavēlnieks, Frodo Baggins 2, Harijs Poters, Harijs Poters 

Iepriekš minētajā programmā mēs esam atvēruši failu rakstīšanas režīmā.

Tad mēs katru rindu esam izlaiduši kā sarakstu. Šie saraksti tiek pārveidoti par norobežotu virkni un ierakstīti CSV failā.

4. piemērs: vairāku rindu rakstīšana ar rakstītājrindām ()

Ja mums ir jāieraksta divdimensiju saraksta saturs CSV failā, mēs to varam izdarīt šādi.

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

Šeit programma nolasa people.csv no pašreizējā direktorija.

Lai rakstītu uz CSV failu, mums jāizsauc to_csv()DataFrame funkcija.

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

Šeit mēs esam izveidojuši DataFrame, izmantojot pd.DataFrame()metodi. Pēc tam to_csv()tiek izsaukta šī objekta funkcija, lai ierakstītu person.csv .

Lai uzzinātu vairāk, apmeklējiet:

  • Python pandas.read_csv (oficiālā vietne)
  • Python pandas.pandas.DataFrame.to_csv (oficiālā vietne)

Interesanti raksti...