Python CSV: Прочетете и напишете CSV файлове

В този урок ще научим как да четем и записваме в CSV файлове в Python с помощта на примери.

CSV (разделени със запетая стойности) формат е един от най-простите и често срещани начини за съхраняване на таблични данни. За да представлява CSV файл, той трябва да бъде запазен с разширението на .csv файл.

Да вземем пример:

Ако отворите горния CSV файл с помощта на текстов редактор като възвишен текст, ще видите:

 SN, име, град 1, Майкъл, Ню Джърси 2, Джак, Калифорния 

Както можете да видите, елементите на CSV файл са разделени със запетаи. Ето ,разделител.

Можете да имате всеки отделен знак като разделител според вашите нужди.

Забележка: Модулът csv може да се използва и за други файлови разширения (като: .txt ), стига съдържанието им да е в правилната структура.

Работа с CSV файлове в Python

Въпреки че бихме могли да използваме вградената open()функция за работа с CSV файлове в Python, има специален csvмодул, който улеснява работата с CSV файлове.

Преди да можем да използваме методите към csvмодула, трябва първо да импортираме модула, като използваме:

 import csv 

Четене на CSV файлове с помощта на csv.reader ()

За да прочетем CSV файл в Python, можем да използваме csv.reader()функцията. Да предположим, че имаме csvфайл с име people.csv в текущата директория със следните записи.

Име Възраст Професия
Джак 23. Лекар
Милър 22. Инженер

Нека прочетем този файл, като използваме csv.reader():

Пример 1: Прочетете CSV с разделител на запетая

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

Изход

 („Име“, „Възраст“, ​​„Професия“) („Джак“, „23“, „Доктор“) („Милър“, „22“, „Инженер“) 

Тук отворихме файла people.csv в режим на четене, използвайки:

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

За да научите повече за отварянето на файлове в Python, посетете: Вход / изход за файлове на Python

След това, csv.reader()се използва за четене на файла, който връща readerобект , който може да се итерира .

След това readerобектът се итерира с помощта на forцикъл за отпечатване на съдържанието на всеки ред.

В горния пример използваме csv.reader()функцията в режим по подразбиране за CSV файлове с разделител на запетая.

Функцията обаче е много по-адаптивна.

Да предположим, че нашият CSV файл използва раздела като разделител. За да четем такива файлове, можем да предадем незадължителни параметри на csv.reader()функцията. Да вземем пример.

Пример 2: Прочетете CSV файл с разделител на раздели

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

Забележете незадължителния параметър delimiter = ' 'в горния пример.

Пълният синтаксис на csv.reader()функцията е:

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

Както можете да видите от синтаксиса, ние също можем да предадем параметъра за диалект на csv.reader()функцията. В dialectпараметъра ни позволява да направим функцията по-гъвкав. За да научите повече, посетете: Четене на CSV файлове в Python.

Писане на CSV файлове с помощта на csv.writer ()

За да запишем в CSV файл в Python, можем да използваме csv.writer()функцията.

Най csv.writer()функцията връща writerобект, който новопокръстените данните на потребителя в ограничен низ. Този низ може по-късно да се използва за запис в CSV файлове с помощта на writerow()функцията. Да вземем пример.

Пример 3: Запис в CSV файл

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

Когато стартираме горната програма, се създава файл protagonist.csv със следното съдържание:

 SN, Movie, Protagonist 1, Lord of the Rings, Frodo Baggins 2, Harry Potter, Harry Potter 

В горната програма отворихме файла в режим на запис.

След това предадохме всеки ред като списък. Тези списъци се преобразуват в низ с разделители и се записват в CSV файла.

Пример 4: Записване на множество редове с writerow ()

Ако трябва да запишем съдържанието на двуизмерния списък в CSV файл, ето как можем да го направим.

 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) 

Резултатът от програмата е същият като в пример 3 .

Тук нашият двуизмерен списък се предава на writer.writerows()метода, за да запише съдържанието на списъка в CSV файла.

Пример 5: Записване в CSV файл с разделител на раздели

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

Обърнете внимание на незадължителния параметър delimiter = ' 'във csv.writer()функцията.

Пълният синтаксис на csv.writer()функцията е:

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

Подобно на csv.reader(), можете също така да предадете параметъра за диалект на csv.writer()функцията, за да я направите много по-адаптивна. За да научите повече, посетете: Писане на CSV файлове в Python

Клас на Python csv.DictReader ()

Обектите на csv.DictReader()клас могат да се използват за четене на CSV файл като речник.

Пример 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") 

Тук програмата чете people.csv от текущата директория.

За да запишем в CSV файл, трябва да извикаме to_csv()функцията на 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') 

Тук създадохме DataFrame, използвайки pd.DataFrame()метода. След to_csv()това се извиква функцията за този обект, която да записва в person.csv .

За да научите повече, посетете:

  • Python pandas.read_csv (официален сайт)
  • Python pandas.pandas.DataFrame.to_csv (официален сайт)

Интересни статии...