Использование функции записи в файл Python

Оглавление

Как разработчики и клиенты могут извлечь выгоду из того, что данные находятся в файловом формате, когда существует множество других вариантов? Почему бы не использовать простую HTML-страницу с AJAX-запросами и таблицами для отображения данных? В этой статье я покажу вам, почему использование языка Python для создания файлов является продуктивным способом их создания и наполнения данными.

Мы рассмотрим несколько API для наполнения наших файлов данными, а также научимся использовать HTTP-библиотеку Requests для получения данных. В этом посте мы будем использовать Python 3 и его инструментарий.

Давайте начнем!

Постановка целей

Первым шагом будет постановка некоторых целей для наших файлов.

  • Во-первых, нам нужно вдохновение: для этого мы сформируем запрос к известному API котировок с помощью модуля Requests в Python.
  • Во-вторых, мы хотим убедиться, что наши инвестиции в фондовый рынок выглядят надежно. Для этого мы воспользуемся Python-оберткой IEXFinance вокруг API разработчика Investors Exchange.
  • .
  • В-третьих, мы также хотим убедиться в том, что наши криптовалюты не теряют своей популярности. Для проверки наших цифровых активов мы получим данные из API Coinbase с помощью модуля Requests.
  • Последнее, мы возьмем все эти полученные данные и запишем в файлы, соответствующие каждому запуску скрипта, и получим один накопительный файл. Все наши файлы будут иметь формат CSV.

Предполагается, что для построения графиков данных, хранящихся в файлах, мы будем использовать возможности электронных таблиц. Давайте разберемся, как работает HTTP-библиотека Requests, и получим наши котировки!

Использование модуля Requests

HTTP-библиотека Requests - это элегантный способ выполнения HTTP-запросов, не требующий ручного труда по формированию строк запросов или форм-кодированию POST-данных.

В первую очередь мы будем делать GET запрос к TheySaidSo или FavQs API для получения нашей вдохновляющей цитаты. Для начала нам необходимо установить библиотеку Requests в каталог нашего проекта. В терминале Unix можно просто выполнить команду pipenv install requests, если у вас установлен pipenv.

Если у вас не установлен pipenv, используйте pip install pipenv для его установки:

Получение вдохновения путем подбора цитат

Теперь, когда библиотека Requests доступна для использования, давайте сформируем наш первый запрос. Поскольку мы будем отслеживать наши любимые акции и криптомонеты, то, наверное, неплохо было бы добавить в наш файл надежду. Затем мы сформируем запрос API Get к API котировок theysaidso.com.

Конечная точка "цитата дня" проста и легко усваивается, давая нам возможность вдохновиться в нужный момент. В качестве альтернативы можно также использовать API FavQs. Этот API позволит выполнять больше запросов, если вы планируете использовать скрипт более 10 раз в час. Теперь пришло время сформировать запрос и отформатировать ответ!

Выше показано, как мы формируем запрос и оформляем ответ. Я привел пример для обоих API.

Я буду ссылаться на API FavQs, поскольку я не плачу за API TheySaidSo. Таким образом, при каждом запуске скрипта у меня всегда будет котировка, так как я не буду превышать их лимит скорости в 30 запросов в 20 секунд.

Сначала мы делаем запрос, а при его успешном выполнении получаем ответ, который нуждается в JSON-декодировании. После декодирования ответа мы можем просто объединить пары ключ/значение словаря в форматированную строку. Этой строкой будет ('quote' - 'author').

Помните, что в искомой цитате могут встречаться запятые. Чтобы учесть это, необходимо с помощью функции replace() заменить все запятые на значение шестнадцатеричного кода HTML для запятых или на любое другое, легко заменяемое значение. Замена на значение шестнадцатеричного кода обеспечит такую же простую замену в будущем. Теперь мы можем сохранить эту строку как константу, чтобы использовать ее в дальнейшем при записи в наш файл.

Для нашего следующего примера мы будем рассматривать несколько иные данные: давайте найдем наши любимые цены на акции!

Лассирование быка, управляемого данными

Существует множество модулей Python для получения биржевой информации. Я выбрал модуль IEXFinance, который работает с API разработчика Investors Exchange. Для этого необходимо, чтобы модуль был доступен в файле сценария. Для установки с помощью pip:

Модуль iexfinance предоставляет множество ценных функций, включая котировки в реальном времени, исторические данные, торговый анализ и т.д. Для нас важно получить только цену акций на момент запуска скрипта.

Анализируя приведенный выше код, мы используем функцию Stock() для вызова одного тикера. Мы делаем это три раза, чтобы упростить код, но вы также можете использовать список внутри Stock() для получения различной информации о тикере.

Нашим главным приоритетом является получение информации о цене наших любимых акций: Tesla, Apple и Google (Alphabet). Используя константы, мы можем вызвать для них функцию get_price(). Функция get_price() возвращает float, который нам необходимо преобразовать в строку. Для сохранения читабельности я решил использовать функцию str() для преобразования.

Теперь, когда у нас сохранены цены на акции и готова котировка, пришло время узнать цены на криптомонеты!

Ловля монет с помощью виртуальных подбрасываний

Coinbase - одна из самых известных бирж, работающих в настоящее время. Поскольку Coinbase настолько популярна, она смогла предоставить своему сообществу разработчиков превосходный API. Кроме того, они достаточно щедры, чтобы разрешить 10 000 вызовов API в час! В этом примере я буду проверять цену покупки BTC, ETH и LTC за USD.

Рассмотрев приведенный пример, мы должны сформировать три запроса к API Coinbase - по одному для каждой валюты. В случае успеха мы получаем объект ответа, декодируем JSON, а затем устанавливаем эту сумму в константу для каждой монеты.

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

В моем примере я использую выходной каталог с основным файлом master.csv и подкаталогом 'individual'. В каталоге 'individual' я размещаю файл, который мы генерируем при каждом запуске скрипта. Наш следующий вопрос: каким должно быть его имя?

Всему свое время

Как насчет того, чтобы использовать модуль DateTime! Я выбрал 'stock-crypto-check-YYYY-MM-DD-HH-MM', потому что мы будем генерировать новое имя файла каждую минуту выполнения скрипта.

Я не беспокоюсь о том, что это будет работать до секунд, поэтому разграничение по минутам меня устраивает. Если вы планируете запускать его раз в день или раз в час, просто измените форматирование, убрав формат времени в зависимости от желаемого интервала.

В приведенном примере видно, что я создал также два других временных формата, которые будут находиться в соответствующих файлах. Я использую модуль DateTime, вызывая сегодняшние дату и время. Для форматирования константы даты я использую функцию strftime(), которая форматирует строку даты с помощью кодов формата.

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

Прилагаются строки с форматированием

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

При записи в файл мы должны быть уверены, что создаем новые строки. Согласно документации по Python, мы можем использовать \n на Unix-машине (\r\n для Windows).

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

Теперь, когда строки акций и криптовалют отформатированы, мы можем перейти к самому интересному. Давайте запишем все эти данные в наши файлы!

Поэзия в движении

Наиболее важной частью является создание каталогов для мастер-файлов и отдельных файлов. В противном случае мы получим ошибку 'FileNotFoundError', если каталог не будет найден.

Сначала создадим файл master.csv. Первый аргумент - имя файла, второй аргумент - режим.

Использование функции open с 'a' в качестве режима означает, что мы будем добавлять в файл с именем. В режиме добавления файл будет создан, если он не существует, а если существует - то будет записан после последней строки.

Я хочу добавить заголовок только один раз, поэтому я выбрал модуль ОС для проверки размера файла в байтах. Если файл совсем новый, то его размер будет равен 0: таким образом, мы можем добавить заголовок. Поскольку это происходит только один раз, вы можете создать файл master.csv и добавить заголовок вручную перед запуском скрипта.

Наконец, самое интересное: мы записываем наши отформатированные данные в файл.

Поскольку мы пишем три строки (не считая заголовка), нам нужны три функции write. Последнюю функцию записи мы будем использовать для форматирования даты и кавычек. Чтобы следовать за полями заголовка, нам нужны два пустых столбца для начала. Затем мы можем объединить дату и кавычки мастера, за которыми следует новая строка, поскольку мы добавляем их в файл master.csv. По окончании работы мы должны закрыть файл (с помощью функции close()), чтобы освободить системные ресурсы, которые использовал файл.

Для отдельных файлов мы будем действовать по той же схеме с небольшими изменениями.

Сначала мы будем использовать отформатированную дату файла в параметре name функции open и использовать режим 'w' для записи.

Если запустить скрипт в течение одной минуты, то предыдущий файл будет перезаписан последними полученными данными. Этого можно избежать, добавив к имени файла секунды.

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

Заключение

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

В представленном коде есть много возможностей для улучшения: например, использование конвенции Python 3.x, рефакторинг функции Stock(), использование менеджера контекста для открытия файлов, pandas для чтения/записи файлов excel и многое другое.

Этот учебник позволяет начать с четкого понимания возможностей создания скрипта для динамической генерации файлов и обновления существующих. Я надеюсь, что вы получили представление об использовании данных для записи в файлы и программной генерации динамических файлов. Счастливого кодирования!

Вернуться на верх