Python загрузить csv файл

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

Чтение CSV-файлов

Файл example.csv , из которого будем читать:

Чтобы прочитать данные из CSV-файла, необходимо создать объект Reader , который обеспечивает возможность итерирования по строкам файла:

Теперь, когда у нас есть список списков, можно обращаться к отдельным ячейкам с помощью exampleData[row][col] . В случае больших CSV-файлов целесообразно использовать объект Reader в цикле for . Тем самым удается избежать загрузки всего файла в оперативную память.

Модуль csv дает программисту возможность выполнять структурный анализ файлов CSV (Comma Separated Values – переменные, разделенные запятыми). Файл CSV – это текстовый файл, в котором каждая строка имеет несколько полей, разделенных запятыми, или другими разделителями. Вы можете рассматривать каждую строчку как ряд, а каждое поле — как столбец. Формат CSV не имеет стандарта, но эти файлы достаточно похожи, так что модуль csv может распознавать большую часть этих файлов. Вы также можете создавать файлы CSV, используя данный модуль.

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

Существует два способа чтения файлов CSV. Вы можете использовать функцию чтения модуля csv, или использовать класс DictReader. Мы рассмотрим оба метода. Но сначала, нам нужно получить файлы CSV, чтобы было над чем работать. В интернете есть много сайтов, предлагающих познавательную информацию в формате CSV. Мы используем сайт всемирной организации здравоохранения, чтобы скачать кое-какую информацию о туберкулёзе. Вы можете получить её здесь: http://www.who.int/tb/country/data/download/en/
Как только вы скачаете файл, мы будем готовы начать. Готовы? Давайте взглянем на следующий код:

Вот здесь мы остановимся. В первую очередь, нам нужно импортировать модуль csv. После этого, нам нужно создать очень простую функцию, под названием csv_reader, которая получает доступ к объекту файла. Внутри функции, мы передаем файл функции csv.reader, которая возвращает объект-считыватель. Объект-считыватель позволяет выполнить итерацию также, как это делает обычный объект file.

Это позволяет выполнять итерацию над каждым рядом в объекте-считывателе и отобразить строку данных, но без запятых. Это работает по той причине, что каждый ряд является списком, и мы можем объединить все элементы в списке вместе, создав одну большую строку. А теперь мы создадим наш собственный файл CSV и загрузим его в класс DictReader. Вот очень простой пример:

Давайте сохраним это в файле, под названием data.csv . Теперь мы готовы проанализировать файл при помощи класса DictReader. Давайте попробуем:

В данном примере мы открыли файл и привязали объект файла к нашей функции таким же образом, каким мы делали это раньше. Функция привязывает наш объект к нашему классу DictReader. Мы указываем классу DictReader, что разделителем является запятая. Не то, что бы это было необходимо в нашем коде, так как он работает и без этого аргумента. Тем не менее, это хорошая идея, так как это позволяет пролить свет на то, что именно происходит внутри кода. Далее, мы применяем цикл над объектом-считывателем, и обнаруживаем, что каждая строка в нем – это словарь. Это упрощает печать отдельных фрагментов линии. Теперь мы готовы научиться писать файл csv на диск.

Пишем CSV файл

Модуль csv также имеет два метода, которые вы можете применять для написания файла CSV. Вы можете использовать функцию writer, или класс DictWriter. Мы рассмотрим оба метода. Начнем с функции writer. Давайте взглянем на простой пример:

В данном коде мы создали функцию csv_writer которая принимает два аргумента: path и data. «data» — это список списков, которые мы создали внизу скрипта. Мы использовали сокращенную версию аргумента data из предыдущего примера и разделили строки запятыми. Это возвращает список. Таким образом, мы получаем вложенный список, который выглядит следующим образом:

Функция csv_writer открывает путь, по которому мы проходим, и создает объект записи csv. После этого мы используем цикл в нашем вложенном списке, и записываем каждую строку на наш диск. Обратите внимание на то, что мы указали на то, какой именно символ является разделителем, когда создавали объект записи. Если вы хотите, чтобы разделителем была не запятая, а любой другой символ – это именно та самая часть, в которой вы можете это указать.

Теперь мы готовы к тому, чтобы научиться писать файлы CSV при помощи класса DictWriter. Мы используем аргумент data из предыдущего примера, и превратим его в список словарей, которые мы можем загрузить в наш DictWriter. Давайте взглянем:

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

Внутри цикла for мы используем встроенные инструменты Python, чтобы создать словарь. Метод zip будет использовать два итератора (списка, в нашем случае), и превратит их в список кортежей. Давайте взглянем на пример:

Теперь, когда вы оборачиваете этот вызов в dict, этот список кортежей превращается в словарь. И наконец, мы добавляем словарь в список. Когда for завершит работу, вы получите структуру данных, которая будет выглядеть так:

В конце второй сессии, мы вызываем нашу функцию csv_dict_writer и передаем ей все необходимые аргументы. Внутри функции мы создаем экземпляр DictWriter и передаем ей объекту файла, значение разделителя и наш список наименований полей. Далее, мы записываем наименования полей на наш диск, зацикливаем данные по одной строке за раз, и записываем данные на диск. Класс DictWriter также поддерживает метод writerows, который мы можем использовать вместо цикла. Функция csv.writer также может делать это. Вы, может быть, заинтересованы в том, что бы научиться создавать диалекты при помощи модуля csv. Это позволит вам указывать модулю csv, как именно читать или писать файл в очень простой форме. Если вам это нужно, так файл вашего клиента непонятно как отформатирован – вы найдете эту часть функционала просто незаменимой.

Подведем итоги

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

Подпишись на канал!

Новые видеоуроки, книги и полезные статьи для python программистов!

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.

модуль csv.writer

Этот модуль похож на модуль csv.reader и используется для записи данных в CSV. Требуется три параметра:

  • csvfile : это может быть любой объект с методом write() .
  • dialect = ‘excel’ : необязательный параметр, используемый для определения набора параметров, специфичных для конкретного CSV.
  • fmtparam : необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.

Классы DictReader и DictWriter

DictReader и DictWriter — это классы, доступные в Python для чтения и записи в CSV. Хотя они и похожи на функции чтения и записи, эти классы используют объекты словаря для чтения и записи в CSV-файлы.

DictReader

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

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 . По умолчанию используется значение ‘
    ‘ .
  • quotechar: строка, используемая для цитирования полей, содержащих специальные символы. По умолчанию это ‘"’ .
  • skipinitialspace: Если установлено значение True , любые пробелы, следующие сразу за разделителем, игнорируются.
  • strict: если установлено значение True , возникает Error при неправильном вводе CSV.
  • quoting: определяет, когда следует создавать кавычки при чтении или записи в CSV.

Чтение файла CSV

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

Создайте свой CSV-файл и сохраните его как example.csv. Убедитесь, что он имеет расширение .csv и заполните некоторые данные. Здесь у нас есть CSV-файл, который содержит имена учеников и их оценки.

Ниже приведен код для чтения данных в нашем CSV с использованием функции csv.reader и класса csv.DictReader .

Чтение CSV-файла с помощью csv.reader

В приведенном выше коде мы импортируем модуль CSV, а затем открываем наш файл CSV в виде File . Затем мы определяем объект reader и используем метод csv.reader для извлечения данных в объект. Затем мы перебираем объект reader и извлекаем каждую строку наших данных.

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

Вывод

Чтение CSV-файла с помощью DictReader

Как мы упоминали выше, DictWriter позволяет нам читать CSV-файл, отображая данные в словарь вместо строк, как в случае с модулем csv.reader . Хотя имя поля является необязательным параметром, важно всегда помечать столбцы для удобства чтения.

Вот как читать CSV, используя класс DictWriter.

Сначала мы импортируем модуль csv и инициализируем пустой список results , который мы будем использовать для хранения полученных данных. Затем мы определяем объект reader и используем метод csv.DictReader для извлечения данных в объект. Затем мы перебираем объект reader и извлекаем каждую строку наших данных.

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

Вывод

Как вы можете видеть выше, лучше использовать класс DictReader, потому что он выдает наши данные в формате словаря, с которым легче работать.

Запись в файл CSV

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

Запись в файл CSV с помощью csv.writer

Код ниже записывает данные, определенные в файл example2.csv .

Сначала мы импортируем модуль csv, и функция writer() создаст объект, подходящий для записи. Чтобы перебрать данные по строкам, нам нужно использовать функцию writerows() .

Вот наш CSV с данными, которые мы записали в него.

Запись в файл CSV с использованием DictWriter

Давайте напишем следующие данные в CSV.

Код, как показано ниже.

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

Вот как можно записать все строки одновременно.

Заключение

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

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

Оцените статью
Много толка
Добавить комментарий