Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)
Формат CSV является наиболее часто используемым форматом импорта и экспорта для баз данных и электронных таблиц. В этом руководстве будет подробно рассказано о CSV, а также о модулях и классах, доступных для чтения и записи данных в файлы CSV. Также будет рассмотрен рабочий пример, показывающий, как читать и записывать данные в файл CSV на Python.
Что такое файл CSV?
Файл CSV (значения, разделенные запятыми) позволяет сохранять данные в табличной структуре с расширением .csv. CSV-файлы широко используются в приложениях электронной коммерции, поскольку их очень легко обрабатывать. Некоторые из областей, где они были использованы, включают в себя:
- импорт и экспорт данных клиентов
- импорт и экспорт продукции
- экспорт заказов
- экспорт аналитических отчетов по электронной коммерции
Модули для чтения и записи
Модуль CSV имеет несколько функций и классов, доступных для чтения и записи CSV, и они включают в себя:
- функция csv.reader
- функция csv.writer
- класс csv.Dictwriter
- класс csv.DictReader
csv.reader
Модуль csv.reader принимает следующие параметры:
-
csvfile: обычно это объект, который поддерживает протокол итератора и обычно возвращает строку каждый раз, когда вызывается его метод__next__(). -
dialect='excel': необязательный параметр, используемый для определения набора параметров, специфичных для определенного диалекта CSV. -
fmtparams: необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.
Вот пример того, как использовать модуль csv.reader.
1 |
import csv |
2 |
|
3 |
with open('example.csv', newline='') as File: |
4 |
reader = csv.reader(File) |
5 |
for row in reader: |
6 |
print(row) |
модуль csv.writer
Этот модуль похож на модуль csv.reader и используется для записи данных в CSV. Требуется три параметра:
-
csvfile: это может быть любой объект с методомwrite(). -
dialect = 'excel': необязательный параметр, используемый для определения набора параметров, специфичных для конкретного CSV. -
fmtparam: необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.
Классы DictReader и DictWriter
DictReader и DictWriter - это классы, доступные в Python для чтения и записи в CSV. Хотя они и похожи на функции чтения и записи, эти классы используют объекты словаря для чтения и записи в CSV-файлы.
DictReader
Он создает объект, который отображает прочитанную информацию в словарь, ключи которого задаются параметром fieldnames. Этот параметр является необязательным, но если он не указан в файле, данные первой строки становятся ключами словаря.
Пример:
1 |
import csv |
2 |
with open('name.csv') as csvfile: |
3 |
reader = csv.DictReader(csvfile) |
4 |
for row in reader: |
5 |
print(row['first_name'], row['last_name']) |
DictWriter
Этот класс аналогичен классу DictWriter и выполняет противоположную функцию: запись данных в файл CSV. Класс определяется как csv.DictWriter(csvfile, fieldnames,restval='', extrasaction='raise',dialect='excel', *args, **kwds)
Параметр fieldnames определяет последовательность ключей, которые определяют порядок, в котором значения в словаре записываются в файл CSV. В отличие от DictReader, этот ключ не является обязательным и должен быть определен во избежание ошибок при записи в CSV.
Диалекты и форматирование
Диалект - это вспомогательный класс, используемый для определения параметров для конкретного экземпляра reader или writer. Диалекты и параметры форматирования должны быть объявлены при выполнении функции чтения или записи.
Есть несколько атрибутов, которые поддерживаются диалектом:
- delimiter: строка, используемая для разделения полей. По умолчанию это
','. - double quote: Управляет тем, как должны появляться в кавычках случаи, когда кавычки появляются внутри поля. Может быть True или False.
- escapechar: строка, используемая автором для экранирования разделителя, если в кавычках задано значение
QUOTE_NONE. - lineterminator: строка, используемая для завершения строк, созданных
writer. По умолчанию используется значение'\r\n'.
- quotechar: строка, используемая для цитирования полей, содержащих специальные символы. По умолчанию это
'"'. - skipinitialspace: Если установлено значение
True, любые пробелы, следующие сразу за разделителем, игнорируются. - strict: если установлено значение
True, возникает Error при неправильном вводе CSV. - quoting: определяет, когда следует создавать кавычки при чтении или записи в CSV.
Чтение файла CSV
Давайте посмотрим, как читать CSV-файл, используя вспомогательные модули, которые мы обсуждали выше.
Создайте свой CSV-файл и сохраните его как example.csv. Убедитесь, что он имеет расширение .csv и заполните некоторые данные. Здесь у нас есть CSV-файл, который содержит имена учеников и их оценки.



Ниже приведен код для чтения данных в нашем CSV с использованием функции csv.reader и класса csv.DictReader.
Чтение CSV-файла с помощью csv.reader
1 |
import csv |
2 |
|
3 |
with open('example.csv') as File: |
4 |
reader = csv.reader(File, delimiter=',', quotechar=',', |
5 |
quoting=csv.QUOTE_MINIMAL) |
6 |
for row in reader: |
7 |
print(row) |
В приведенном выше коде мы импортируем модуль CSV, а затем открываем наш файл CSV в виде File. Затем мы определяем объект reader и используем метод csv.reader для извлечения данных в объект. Затем мы перебираем объект reader и извлекаем каждую строку наших данных.
Мы показываем прочитанные данные, печатая их содержимое на консоль. Мы также указали обязательные параметры, такие как разделитель, кавычка и цитирование.
Вывод
1 |
['first_name', 'last_name', 'Grade'] |
2 |
['Alex', 'Brian', 'B'] |
3 |
['Rachael', 'Rodriguez', 'A'] |
4 |
['Tom', 'smith', 'C'] |
Чтение CSV-файла с помощью DictReader
Как мы упоминали выше, DictWriter позволяет нам читать CSV-файл, отображая данные в словарь вместо строк, как в случае с модулем csv.reader. Хотя имя поля является необязательным параметром, важно всегда помечать столбцы для удобства чтения.
Вот как читать CSV, используя класс DictWriter.
1 |
import csv |
2 |
|
3 |
results = [] |
4 |
with open('example.csv') as File: |
5 |
reader = csv.DictReader(File) |
6 |
for row in reader: |
7 |
results.append(row) |
8 |
print results |
Сначала мы импортируем модуль csv и инициализируем пустой список results, который мы будем использовать для хранения полученных данных. Затем мы определяем объект reader и используем метод csv.DictReader для извлечения данных в объект. Затем мы перебираем объект reader и извлекаем каждую строку наших данных.
Наконец, мы добавляем каждую строку в список результатов и выводим содержимое на консоль.
Вывод
1 |
[{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}, |
2 |
{'Grade': 'A', 'first_name': 'Rachael', 'last_name': 'Rodriguez'}, |
3 |
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'}, |
4 |
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}, |
5 |
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}] |
Как вы можете видеть выше, лучше использовать класс DictReader, потому что он выдает наши данные в формате словаря, с которым легче работать.
Запись в файл CSV
Давайте теперь посмотрим, как приступить к записи данных в файл CSV с использованием функции csv.writer и класса csv.Dictwriter, которые обсуждались в начале этого урока.
Запись в файл CSV с помощью csv.writer
Код ниже записывает данные, определенные в файл example2.csv.
1 |
import csv |
2 |
|
3 |
myData = [["first_name", "second_name", "Grade"], |
4 |
['Alex', 'Brian', 'A'], |
5 |
['Tom', 'Smith', 'B']] |
6 |
|
7 |
myFile = open('example2.csv', 'w') |
8 |
with myFile: |
9 |
writer = csv.writer(myFile) |
10 |
writer.writerows(myData) |
11 |
|
12 |
print("Writing complete") |
Сначала мы импортируем модуль csv, и функция writer() создаст объект, подходящий для записи. Чтобы перебрать данные по строкам, нам нужно использовать функцию writerows().
Вот наш CSV с данными, которые мы записали в него.



Запись в файл CSV с использованием DictWriter
Давайте напишем следующие данные в CSV.
1 |
data = [{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}, |
2 |
{'Grade': 'A', 'first_name': 'Rachael', 'last_name': 'Rodriguez'}, |
3 |
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'}, |
4 |
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}, |
5 |
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}] |
6 |
|
7 |
Код, как показано ниже.
1 |
import csv |
2 |
|
3 |
with open('example4.csv', 'w') as csvfile: |
4 |
fieldnames = ['first_name', 'last_name', 'Grade'] |
5 |
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) |
6 |
|
7 |
writer.writeheader() |
8 |
writer.writerow({'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}) |
9 |
writer.writerow({'Grade': 'A', 'first_name': 'Rachael', |
10 |
'last_name': 'Rodriguez'}) |
11 |
writer.writerow({'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}) |
12 |
writer.writerow({'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Loive'}) |
13 |
|
14 |
print("Writing complete") |
Сначала мы определим fieldnames, которые будут представлять заголовки каждого столбца в файле CSV. Метод writerrow() будет записывать по одной строке за раз. Если вы хотите записать все данные одновременно, вы будете использовать метод writerrows().
Вот как можно записать все строки одновременно.
1 |
import csv |
2 |
|
3 |
with open('example5.csv', 'w') as csvfile: |
4 |
fieldnames = ['first_name', 'last_name', 'Grade'] |
5 |
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) |
6 |
|
7 |
writer.writeheader() |
8 |
writer.writerows([{'Grade': 'B', 'first_name': 'Alex', 'last_name': 'Brian'}, |
9 |
{'Grade': 'A', 'first_name': 'Rachael', |
10 |
'last_name': 'Rodriguez'}, |
11 |
{'Grade': 'C', 'first_name': 'Tom', 'last_name': 'smith'}, |
12 |
{'Grade': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}, |
13 |
{'Grade': 'A', 'first_name': 'Kennzy', 'last_name': 'Tim'}]) |
14 |
|
15 |
print("writing complete") |
Заключение
В этом руководстве рассматривается большинство вопросов, необходимых для успешного чтения и записи в файл CSV с использованием различных функций и классов, предоставляемых Python. Файлы CSV широко используются в приложениях, потому что их легко читать и управлять ими, а их небольшой размер делает их относительно быстрыми для обработки и передачи.
Не стесняйтесь, и посмотрите, что у нас есть для продажи и для изучения на рынке, и не стесняйтесь задавать любые вопросы и предоставить свой ценный отзыв, используя канал комментариев ниже.



