Файлы формата CSV (comma-separated values) широко используются для хранения табличных данных. В этой статье мы рассмотрим возможности языка Python для работы с такими файлами - чтения, записи, анализа и визуализации данных.
Часть 1. Основы формата CSV и чтение файлов
Давайте для начала разберемся, что такое CSV файл и какова его структура.
Определение формата CSV
CSV (comma separated values) - текстовый формат, предназначенный для представления табличных данных. Каждая строка в CSV файле соответствует одной записи или строке таблицы. Столбцы разделяются специальными символами, чаще всего запятыми или точками с запятой, отсюда и название.
Несмотря на простоту, CSV позволяет хранить большие объемы данных, которые легко обрабатывать программно. CSV файлы можно открывать и редактировать в электронных таблицах, импортировать в базы данных.
Структура CSV файла
В общем виде CSV файл имеет следующую структуру:
- Первая строка может содержать заголовки столбцов.
- Каждая последующая строка - данные одной записи.
- Значения разделяются символом-разделителем, чаще всего запятой или точкой с запятой.
- Текстовые значения можно заключать в кавычки.
- Строки разделяются символами перевода строки.
Ниже пример CSV файла:
Имя,Возраст,Город Иван,23,Москва Мария,18,Санкт-Петербург
Преимущества и недостатки формата
Главные преимущества CSV:
- Простота формата.
- Удобство обработки и импорта в другие приложения.
- Возможность хранить большие объемы данных.
- Легкая читаемость и понимание структуры.
К недостаткам можно отнести:
- Отсутствие стандарта - разные приложения используют разные настройки.
- Текстовый формат - неэффективен для бинарных данных.
- Ограниченные возможности верификации и валидации.
Сферы применения CSV
Формат CSV часто применяют:
- Для импорта и экспорта данных из табличных баз и электронных таблиц.
- В качестве промежуточного формата обмена данными между приложениями.
- Для публикации открытых данных.
- В задачах машинного обучения.
Загрузка модуля csv в Python
Для работы с CSV в Python есть встроенный модуль csv. Чтобы начать использовать его, нужно импортировать:
import csv
Этот модуль содержит классы и функции для чтения и записи данных в CSV файлы.
Функция csv.reader для чтения данных
Основная функция для чтения CSV - csv.reader(). Она принимает файловый объект и возвращает объект-итератор, построчно читающий данные.
Пример использования:
import csv with open('data.csv') as f: reader = csv.reader(f) for row in reader: print(row)
Здесь мы открываем CSV файл и передаем его в reader. Затем в цикле обрабатываем каждую строку.
Использование reader в цикле и индексация результатов
Каждая строка, возвращаемая reader - это список значений. К ним можно обращаться как к элементам списка:
for row in reader: print(row[0]) # первый столбец
Также строки можно индексировать и в обратном направлении:
print(row[-1]) # последний столбец
Параметры функции reader
Функция csv.reader может принимать необязательные параметры:
- delimiter - символ-разделитель, по умолчанию запятая
- quotechar - символ кавычки
- quoting - режим кавычек
Это позволяет гибко настраивать чтение CSV с разными форматами данных.
Чтение CSV в словари с классом csv.DictReader
Если нужно получить данные в виде словарей, удобно использовать класс csv.DictReader.
Пример:
import csv with open('data.csv') as f: reader = csv.DictReader(f) for row in reader: print(row['column1'])
В этом случае каждая строка CSV отображается в словарь с ключами, соответствующими заголовкам столбцов.
Параметры класса DictReader
Как и reader, класс DictReader принимает параметры форматирования CSV.
Также можно явно указать заголовки:
reader = csv.DictReader(f, fieldnames=['A', 'B'])
Это удобно, если CSV файл не содержит заголовков.
Итерирование по строкам словаря
При итерации DictReader возвращает OrderedDict, к которому можно обращаться как к обычному словарю:
for row in reader: print(row['A'], row['B'])
Порядок ключей сохраняется в соответствии с порядком столбцов CSV.
Выборка данных по ключам
Используя DictReader, можно легко получить список значений определенного столбца:
values = [row['column'] for row in reader]
А также выполнять выборку по нескольким ключам:
result = [row for row in reader if row['column'] > 100]
Таким образом, модуль csv предоставляет удобные средства для чтения данных из CSV файлов. Далее рассмотрим возможности записи.