![]() |
О формате CSV, а также о том, как работать с ним с помощью Python существует большое множество статей. И, казалось бы, что такого сложного в том, чтобы прочитать или записать данный формат. Однако, вспоминая себя и то время, когда я только начал изучать Python я хорошо помню некоторое недопонимание этого вопроса. Может быть, поэтому я решил написать эту небольшую статью. Конечно же, рассмотреть все тонкости и нюансы думаю, что не получиться, но вот базовые операции с данным типом файлов я постараюсь описать.
Давайте начнем с определения формата. Что же такое CSV-файл? CSV – это аббревиатура. В более развернутом варианте звучит это так - Comma-Separated Values, то есть, значения, разделенные запятыми. Данный формат был разработан для представления табличных данных. Таким образом, каждая строка таблицы соответствует строке текста. В такой строке содержится одно или несколько полей, которые разделены запятыми. Данный формат достаточно удобен, но, по крайней мере, пока, стандартизирован не полностью. С одной стороны, разделение полей таблицы запятыми достаточно логично. Но, в этом случае возникнет небольшая проблема, суть которой в том, что табличные данные также могут содержать запятые. Частичным решение данной проблемы является использование кавычек, в которые заключается текст, содержащий такие данные. Со временем появились файлы, которые также попадают под определение CSV, но вот только разделителем в них служит не запятая, а точка с запятой. Или еще один формат, где разделитель – это символ табуляции TSV. Именно поэтому, большинство приложений, которые работают с форматом CSV, позволяют выбирать, что использовать в качестве разделителя или символа кавычек. Для примера, вот скриншот из LibreOffice, где уже при открытии файла можно указать нужные параметры. Что же, думаю, что теории, в данном случае достаточно. Давайте приступать к практике. И начнем мы с самого простого. С чтения файлов данного формата с помощью Python. Чтение файловCSV Для выполнения данной операции устанавливать сторонние модули не нужно. Все, что требуется для работы с CSV файлами, есть в Python «из-коробки». Для использования в нашем примере возьмем файл следующего содержания: https://forum.antichat.xyz/attachments/4926168/02.png Так выглядит данный файл, если его отрыть в блокноте. Здесь представлены «виртуальные» данные, которые образуют небольшую таблицу, в которой содержаться: Отображаемое имя, Имя, Отчество, Фамилия, Примечание, Номер телефона, Место работы, Должность. Создадим небольшой код, который выведет данные из таблицы построчно. Python: Код:
importhttps://forum.antichat.xyz/attachments/4926168/03.png Чтение файловCSV с помощью DictReader Теперь давайте прочитаем наш файл с контактами несколько иначе. Если в предыдущем примере данные считывались построчно и были представлены в виде списка, то прочитав файл с помощью DictReader, мы получим словарь из каждой строки таблицы, в качестве ключей, в котором, будут заголовки. В нашем примере это выглядит так: https://forum.antichat.xyz/attachments/4926168/04.png Таким образом, мы можем модифицировать предыдущий код с учетом использования DictReader. Python: Код:
importhttps://forum.antichat.xyz/attachments/4926168/05.png Как мы видим, кода стало несколько меньше, а результат мы получили тот же самый. Однако следует понимать, что не каждый файл csv содержит заголовки. Потому, нужно учитывать это в своем коде. И использовать нужный способ чтения файла в каждом конкретном случае. Читаем файлCSV с помощью Pandas Думаю, как вы уже поняли из заголовка, в данном примере, для чтения файла CSV мы будем использовать стороннюю библиотеку Pandas. Поэтому, для начала ее нужно установить с помощью pip. Для этого пишем в терминале: Код:
pip install pandasPython: Код:
importhttps://forum.antichat.xyz/attachments/4926168/06.png Как видим, библиотека самостоятельно определила, что первая строка является заголовками. А также назначила каждой строке индекс. А теперь проделаем то же самое, что делали в предыдущих примерах, то есть, выведем данные о каждой записи. В данном случае мы будем итерироваться по значениям, которые представляют из себя список. А также, так как у нас такое же количество заголовков, как и записей в строке, выводим для каждого значения заголовок по индексу, который определяем с помощью enumerate. Python: Код:
importТеперь рассмотрим способы сохранения данных в этот формат. Сохранение данных вCSV Предположим у нас есть некий набор данных разделенных запятой. Выглядит это примерно так: https://forum.antichat.xyz/attachments/4926168/09.png Этот набор данных необходимо сохранить в csv-файл. Для начала переведем наш набор в список из списков со строками. Вот, что у нас получиться после перевода: https://forum.antichat.xyz/attachments/4926168/10.png После того, как данная операция будет выполнена, откроем файл с расширением «.csv» на запись, укажем кодировку, а также параметр newline='', то есть режим перевода строк. Если не указать данный параметр, строки будут сохранятся не подряд, а разделенные пустой строкой. Создаем объект писателя, указываем файл, в который нужно записывать значения, а также разделитель. После итерируемся по созданному списку из списков строк и записываем каждый список в файл. Python: Код:
importТакже, как и при чтении файлов csv, при записи можно использовать DictWriter. С его помощью можно записать в csv-файл уже готовый словарь с данными. Каждый словарь представляет из себя строку с ключами в виде заголовков. Однако, для начала эти заголовки необходимо определить. Для начала создадим список со списками, как в предыдущем примере. Так как первая строка в нашем наборе данных представлена заголовками, заберем из списка списков первое значение с помощью pop. pop удаляет значение из списка и возвращает его в переменную. Таким образом, у нас есть список с заголовками. Теперь проитерируемся по списку со списками и создадим с помощью zip словари с данными. Открываем файл на запись, указываем кодировку, режим перевода строк. Записываем с файл csv заголовки таблицы с помощью DictWriter. Затем итерируемся по созданным словарям из строк и записываем значения в файл. Python: Код:
importТакже для сохранения данных можно использовать библиотеку pandas. Если она у вас еще не установлена, то ее необходимо установить с помощью pip: Код:
pip install pandasPython: Код:
importВ данном случае, если набор данных не представлен особо сложными структурами, то можно уложиться в одну строку кода, помимо импорта библиотеки. Здесь мы читаем текстовый файл как csv, а затем сразу же сохраняем его в нужный нам формат с отключенными индексами. Если этого не сделать, в файл, помимо данных, будут сохранены индексы. https://forum.antichat.xyz/attachments/4926168/07.png Python: Код:
importКонвертацияCSV в XLSX с помощью openpyxl В данном примере для конвертации данных из одного формата в другой мы будем использовать библиотеку openpyxl. Следовательно, нам ее необходимо установить, так как, это сторонняя библиотека. Для этого пишем в терминале команду: Код:
pip install openpyxlВыглядеть на нашем примере это будет так: https://forum.antichat.xyz/attachments/4926168/12.png После этого создаем рабочую книгу workbook и делаем ее активной с помощью метода active. Теперь в цикле итерируемся по списку списка строк и добавляем в созданную таблицу. После окончания итерации сохраняем изменения в файл. Python: Код:
importРассмотрим еще один пример, в котором будем преобразовывать формат csv в xlsx с помощью библиотеки pandas. Делается это с помощью пары строк. В первой мы открываем файл csv, во второй сохраняем его в xlsx без индексов с созданием заголовков. Python: Код:
importPython: Код:
importКонвертация CSV в Excel с помощьюXlsxWriter Рассмотрим еще один способ, с помощью которого также можно произвести сохранение данных из формата csv в формат xlsx. Для этого мы будем использовать стороннюю библиотеку xlsxwriter, которую можно установить с помощью данной команды: Код:
pip install XlsxWriterСоздаем файл xlsx. Добавляем в него рабочую книгу. Затем открываем файл csv и в цикле считываем его построчно. Запускаем еще один цикл, в котором итерируемся по столбцу и записываем данные в рабочую книгу по соответствующим индексам координатам. После чего закрываем рабочую книгу. Python: Код:
importТеперь давайте рассмотрим преобразование файлов xlsx в формат csv. Для этого нам понадобиться рассматриваемая ранее библиотека openpyxl. Поэтому, если вы ее еще не установили, сделать это можно командой: Код:
pip install openpyxlPython: Код:
importС помощью pandas преобразование происходит довольно просто. Необходимо отрыть файл. А затем сохранить его, указав наличие заголовков и отсутствие индекса. Python: Код:
importРассмотрим еще один пример, в котором конвертируем файлы формата 2003 офиса в новый xlsx формат. Для этого мы будем использовать библиотеку pywin32, а следовательно, вам требуется, в данном случае, наличие ОС Windows. Для установки библиотеки пишем в терминале: Код:
pip install pywin32Python: Код:
importВ данной статье мы рассмотрели различные способы открытия, сохранения, а также конвертации файлов в формате csv. Конечно же, это самые простые случаи, но на их основе уже можно составить представление о том, как строить свою работу и какую информацию искать в дальнейшем. Для более подробной информации можно обратиться к документации:
Спасибо за внимание. Надеюсь, данная информация будет вам полезна |
Все четко и по делу, как всегда.
|
| Время: 07:17 |