Чтение файлов в формате CSV в Python

Перевод статьи «Python Read CSV Tutorial».

CSV расшифровывается как «Comma Separated Values», т.е. «значения, разделенные запятыми». Это самый простой способ хранения данных в виде обычного текста. Данные представлены в табличной форме, где каждая строка является строкой записи таблицы. Сегодня мы поговорим про чтение формата CSV в Python. Расскажем о различных функциях для работы с CSV-файлами, а также о том, как создать свой файл CSV.

Чтение CSV-файла при помощи csv.reader(). Метод 1

Пример 1. Использование запятой в качестве разделителя

Допустим, у нас есть файл с именем sample1, содержащий некоторые данные. Такой файл можно создать с помощью любого текстового редактора или путем передачи значений в какую-нибудь программу для записи файла CSV. Как это делается, мы расскажем чуть позже.

Текст в этом файле разделен запятыми. Наши данные — сведения о различных книгах (порядковый номер, название, имя автора).

python read csv tutorial 1

Переходим к коду. Чтобы прочитать файл CSV, нам нужен объект reader для выполнения функции чтения. Первым делом импортируем модуль csv (встроенный модуль Python). Далее укажем имя файла, который нужно открыть (или путь к нему). Затем инициализируем объект reader. Он будет перебираться в цикле for.

reader = csv.reader(файл)

Данные из указанного файла выводятся построчно.

python read csv tutorial 2

Запустим наш код. Можем увидеть, что наши данные автоматически преобразовались в списки, состоящие из элементов данных каждой строки.

Пример 2. Использование табуляции в качестве разделителя

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

Возьмём код из предыдущего примера и сделаем лишь одно изменение: напрямую укажем разделитель (delimiter). В предыдущем примере не было никакой необходимости его указывать, потому что запятая — разделитель по умолчанию.

reader = csv.reader(file, delimiter = ‘\t’)
python read csv tutorial 3

Как видите, результат немного изменился. Теперь все элементы строки являются одним элементом списка. Так произошло потому, что в этот раз мы указали в качестве разделителя не запятую, а \t.

Чтение CSV-файла при помощи csv.reader(). Метод 2

Теперь давайте обсудим альтернативный метод чтения файлов CSV. Предположим, у нас есть файл sample5, сохраненный с расширением .csv. В файле сохранены данные об учениках, их именах, классе и предметах.

python read csv tutorial 4

Теперь перейдем к коду. Первый шаг такой же, как и в прошлый раз – импорт модуля. Затем укажем путь или имя файла, который необходимо открыть и использовать.

Этот код является примером одновременного чтения и изменения данных. Мы инициализируем два массива для будущего использования в этом коде. Затем открываем файл с помощью функции open(). Далее инициализируем объект, как мы это делали в приведенных выше примерах. Здесь снова используется цикл for.

Следующая функция сохраняет текущее значение строк и пересылает объект для следующей итерации:

fields = next(csvreader)
python read csv tutorial 5

Все строки добавляются к списку с именем rows.

rows.append(row)

Если мы хотим увидеть общее количество строк, вызовем следующую функцию вывода.

print(“total rows are: %d “%(csvreader.line_num))

Чтобы вывести заголовок столбца или имя поля, используем функцию, в которой к тексту (с помощью метода .join()) присоединяются все заголовки.

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

Использование DictReader

Эта функция используется для вывода данных из текстового файла в виде словаря.

У нас есть файл sample7.txt со следующими данными об учениках.

python read csv tutorial 6

Примечание. Не обязательно сохранять файл с расширением .csv, можно и в других форматах. Главное, чтобы в самом файле использовался простой текст и данные оставались в первозданном виде.

Теперь воспользуемся приведенным ниже кодом, чтобы прочитать данные и вывести их в формате словаря. Вся методика одинакова, только вместо reader используется DictReader.

csv_file = csv.DictReader(file)
python read csv tutorial 7

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

Пробелы в файлах CSV

Каждый раз при использовании csv.reader() мы автоматически получаем пробелы в выводе. Чтобы удалить эти лишние пробелы из вывода, нам нужно использовать функцию reader(), указав при этом специальный параметр. Предположим, файл содержит следующие данные, касающиеся информации о сотруднике.

python read csv tutorial 8
reader = csv.reader(file, skipinitialspace = True)

Укажем значение skipinitialspace, равное True. Благодаря этому неиспользуемое свободное пространство удаляется из вывода.

python read csv tutorial 9

Модуль CSV и диалекты

Если мы начнем работать, используя одни и те же файлы csv с форматами функций в коде, это сделает код очень некрасивым и непоследовательным. Модуль CSV помогает использовать метод диалектов в качестве опции для удаления избыточности данных.

Рассмотрим в качестве примера те же исходные данные, но на этот раз разделенные символом |. Мы хотим удалить этот символ, пропустить лишний пробел и использовать одинарные кавычки между соответствующими данными.

python read csv tutorial 10

Используя следующую строчку кода, мы получим желаемый результат

csv.register_dialect(‘myDialect’, delimiter =’|’, skipinitialspace=True, quoting= csv.QUOATE_ALL)

Эта строка отличается, поскольку она определяет три основные функции, которые необходимо выполнить. Из выходных данных вы можете видеть, что символ | удаляется, и также добавляются одинарные кавычки.

python read csv tutorial 11

Написание своего CSV-файла

Чтобы открыть файл csv, нам нужно его где-то взять. Если его нет, можно создать такой файл с помощью следующей функции.

Для начала импортируем модуль csv. Затем дадим имя файлу, который хотим создать. Для добавления данных мы будем использовать следующий код:

writer = csv.writer(file)
writer.writerow(……)

Данные вводятся в файл построчно, поэтому следует использовать именно этот оператор.

python read csv tutorial 12

Заключение

В этой статье мы разобрали тему чтения формата CSV в Python. Мы показали, как вывести данные с помощью различных методов, в виде словарей или списков. Также мы рассказали, как удалить лишние пробелы и специальные символы из данных.