1. Code
  2. Python

Как читать и писать CSV-файлы в Python

Scroll to top

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-файл, который содержит имена учеников и их оценки.

Creating a spreadsheet to generate a CSVCreating a spreadsheet to generate a CSVCreating a spreadsheet to generate a 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 с данными, которые мы записали в него.

Our CSV with the data we have written to itOur CSV with the data we have written to itOur CSV with the data we have written to it

Запись в файл 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 широко используются в приложениях, потому что их легко читать и управлять ими, а их небольшой размер делает их относительно быстрыми для обработки и передачи.

Не стесняйтесь, и посмотрите, что у нас есть для продажи и для изучения на рынке, и не стесняйтесь задавать любые вопросы и предоставить свой ценный отзыв, используя канал комментариев ниже.