Python CSV: чтение и запись файлов CSV

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

Формат CSV (значения, разделенные запятыми) - один из самых простых и распространенных способов хранения табличных данных. Чтобы представить файл CSV, он должен быть сохранен с расширением файла .csv .

Возьмем пример:

Если вы откроете указанный выше CSV-файл с помощью текстового редактора, например Sublime Text, вы увидите:

 СН, Имя, Город 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 File Input / Output

Затем 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: Написание нескольких строк с помощью writerows ()

Если нам нужно записать содержимое двумерного списка в файл 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(), вы также можете передать параметр dialect csv.writer()функции, чтобы сделать функцию более настраиваемой. Чтобы узнать больше, посетите: Написание файлов CSV на Python

Класс Python csv.DictReader ()

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

Пример 6: Python csv.DictReader ()

Предположим, у нас есть тот же файл people.csv, что и в примере 1 .

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

Посмотрим, как csv.DictReader()можно использовать.

 import csv with open("people.csv", 'r') as file: csv_file = csv.DictReader(file) for row in csv_file: print(dict(row)) 

Вывод

 («Имя»: «Джек», «Возраст»: «23», «Профессия»: «Врач») («Имя»: «Миллер», «Возраст»: «22», «Профессия»: «Инженер») 

Как мы видим, записи первой строки являются ключами словаря. И записи в других строках являются значениями словаря.

Здесь csv_file - это csv.DictReader()объект. Объект можно перебирать с помощью forцикла. csv.DictReader()Возвратил OrderedDictтип для каждой строки. Вот почему мы привыкли dict()преобразовывать каждую строку в словарь.

Обратите внимание, что мы явно использовали метод dict () для создания словарей внутри forцикла.

 print(dict(row)) 

Примечание . Начиная с Python 3.8, csv.DictReader () возвращает словарь для каждой строки, и нам не нужно использовать его dict()явно.

Полный синтаксис csv.DictReader()класса:

 csv.DictReader(file, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds) 

Чтобы узнать об этом подробнее, посетите: Python csv.DictReader () class

Класс Python csv.DictWriter ()

Объекты csv.DictWriter()класса можно использовать для записи в файл CSV из словаря Python.

Минимальный синтаксис csv.DictWriter()класса:

 csv.DictWriter(file, fieldnames) 

Вот,

  • file - CSV-файл, в который мы хотим записать
  • fieldnames- listобъект, который должен содержать заголовки столбцов, указывающие порядок, в котором данные должны быть записаны в файл CSV

Пример 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 (официальный сайт)

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