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, фільм, головний герой 1, Володар кілець, Фродо Беггінс 2, Гаррі Поттер, Гаррі Поттер 

У вищезазначеній програмі ми відкрили файл у режимі письма.

Потім ми передали кожен рядок як список. Ці списки перетворюються у рядок із розділеннями та записуються у файл 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) 

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

Тут програма читає 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 (офіційний сайт)

Цікаві статті...