Чтение и запись данных в файл в json python

Command Line Interface¶

Source code: Lib/json/tool.py

The module provides a simple command line interface to validate
and pretty-print JSON objects.

If the optional and arguments are not
specified, and will be used respectively:

$ echo '{"json": "obj"}' | python -m json.tool
{
    "json": "obj"
}
$ echo '{1.2:3.4}' | python -m json.tool
Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Changed in version 3.5: The output is now in the same order as the input. Use the
option to sort the output of dictionaries
alphabetically by key.

Command line options

The JSON file to be validated or pretty-printed:

$ python -m json.tool mp_films.json

    {
        "title": "And Now for Something Completely Different",
        "year": 1971
    },
    {
        "title": "Monty Python and the Holy Grail",
        "year": 1975
    }

If infile is not specified, read from .

Write the output of the infile to the given outfile. Otherwise, write it
to .

Sort the output of dictionaries alphabetically by key.

New in version 3.5.

Disable escaping of non-ascii characters, see for more information.

New in version 3.9.

Parse every input line as separate JSON object.

New in version 3.8.

Mutually exclusive options for whitespace control.

New in version 3.9.

Show the help message.

Footnotes

As noted in the errata for RFC 7159,
JSON permits literal U+2028 (LINE SEPARATOR) and
U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas JavaScript
(as of ECMAScript Edition 5.1) does not.

Работа с Python JSON

Python поддерживает стандартную библиотеку marshal и pickle module, а JSON API ведет себя аналогично этой библиотеке. Python изначально поддерживает функции JSON.

Кодирование данных JSON называется сериализацией. Сериализация – это метод, при котором данные преобразуются в последовательности байтов и передаются по сети. Десериализация – это процесс, обратный декодированию данных, преобразованных в формат JSON. Этот модуль включает в себя множество встроенных функций.

Давайте посмотрим на эти функции:

 
import json 
print(dir(json)) 

Выход:

В этом разделе мы изучим следующие методы:

  • load()
  • loads()
  • dump()
  • dumps()

Как создать DataFrame из списка словарей

Чтобы создать DataFrame из списка словарей, просто предоставьте список конструктору класса DataFrame следующим образом: DataFrame(list). Этот вызов возвращает объект DataFrame, содержащий данные списка с ключами в виде имен столбцов.

В данном случае пример выглядит следующим образом:

Результатом приведенного выше кода будет:

Основная проблема этого решения заключается в том, что вы должны убедиться, что ключи в каждом словаре корректны и согласованы друг с другом. В целевом DataFrame будет создано столько столбцов, сколько различных ключей в словарях. Если, например, ключ, связанный с именем, в одном словаре – Name, в другом – name, а в третьем – NAME, то в итоге мы получим три разных колонки (с учетом регистра) для данных об имени, что нам не нужно. Кроме того, у нас будет много значений None, потому что если в других словарях нет значений для определенного ключа, то по умолчанию у нас будет именно None.

DataFrame: таблица данных с маркированными строками и столбцами

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

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

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

Обратите внимание, что таблица может иметь один столбец или одну строку, поэтому если вы встретите данные в таком формате, они также могут быть загружены в DataFrame. Они даже могут иметь одну строку и один столбец, т.е

одно значение!

Чтобы было понятнее, я приведу пример таблицы для наглядности моих слов:

Имя Возраст
Иван 37
Петр 42
Алексей 40

Таблица 1: Пример таблицы, которая может быть загружена в DataFrame

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

Чтение¶

Файл sw_templates.json:

{
  "access" 
    "switchport mode access",
    "switchport access vlan",
    "switchport nonegotiate",
    "spanning-tree portfast",
    "spanning-tree bpduguard enable"
  ],
  "trunk" 
    "switchport trunk encapsulation dot1q",
    "switchport mode trunk",
    "switchport trunk native vlan 999",
    "switchport trunk allowed vlan"
  
}

Для чтения в модуле json есть два метода:

  • — метод считывает файл в формате JSON и возвращает объекты Python
  • — метод считывает строку в формате JSON и возвращает объекты Python

Чтение файла в формате JSON в объект Python (файл json_read_load.py):

import json

with open('sw_templates.json') as f
    templates = json.load(f)

print(templates)

for section, commands in templates.items():
    print(section)
    print('\n'.join(commands))

Вывод будет таким:

$ python json_read_load.py
{'access': , 'trunk': }
access
switchport mode access
switchport access vlan
switchport nonegotiate
spanning-tree portfast
spanning-tree bpduguard enable
trunk
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk native vlan 999
switchport trunk allowed vlan

Как создать DataFrame из файла Excel

Другим распространенным случаем является наличие данных в файле Microsoft Excel или в совместимой электронной таблице, например, в таблицах открытого формата из пакета LibreOffice.

Чтобы создать DataFrame из электронной таблицы или файла Excel, вы можете использовать функцию pandas read_excel, указав ей имя файла. Эта функция открывает и считывает файл и создает DataFrame с его содержимым, готовый к использованию.

На изображении ниже показаны данные, содержащиеся в электронной таблице, в данном случае созданной с помощью Google Drive и сохраненной в формате xlsx с именем data.xlsx.

Электронная таблица для загрузки в pandas DataFrame

Для загрузки данных из файла и создания DataFrame мы будем использовать функцию read_excel. Эта функция выполняет чтение данных из исходного файла с помощью другой библиотеки. Так как в данном случае формат файла – Excel, используемая библиотека – openpyxl, которую необходимо установить с помощью команды pip install openpyxl. Если нам нужно прочитать файл в формате Open Document Format (например, в LibreOffice), то библиотека для установки – odf.

После установки необходимой библиотеки мы можем использовать функцию read_excel следующим простым способом:

Легко, не так ли? Результат на экране будет выглядеть следующим образом:

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

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

Например, если таблица данных начинается со строки 3 и столбца B листа с названием Employees в файле data.xlsx, мы можем загрузить данные следующим образом: df = pd.read_excel(‘data.xlsx’, sheet_name=’Employees’, usecols=’B:D’, skiprows=2).

Разбираем JSON-данные в Python

Если мы хотим выполнить обратную операцию и быстро раскодировать формат JSON средствами языка Python, нам поможет метод loads. Он позволяет без труда преобразовать JSON в объект, и с этим объектом мы сможем легко взаимодействовать в программе.

import json
jsonData = """ {
    "ID"       : 310450,
    "login"    : "admin",
    "name"     : "James Bond",
    "password" : "root",
    "phone"    : 3330303,
    "email"    : " ",
    "online"   : true
} """
dictData = json.loads(jsonData)
print(dictData"name"])
print(dictData"phone"])
print(dictData"email"])
print(dictData"online"])

James Bond
3330303
bond@mail.com 
True

Мы видим, что произошло обратное, а литерал true автоматически преобразовался в True. Это произошло, чтобы была возможность работать с ним средствами Python.

P.S. Итак, мы выполнили кодирование и декодирование информации в JSON-формате с помощью встроенных средств Python. Благодаря наличию удобных методов из модуля json (dumps и loads), эти операции были осуществлены довольно просто. Остаётся добавить, что функции loads и dumps способны взаимодействовать и с другими видами объектов, включая более сложные (например, со вложенными разновидностями словарей со множеством строковых значений).

Закрытие файла в Python

После того, как мы открыли файл, и выполнили все нужные операции, нам необходимо его закрыть. Для закрытия файла используется функция close().


file = open("text.txt", "r", encoding = "utf-8" )

file.close()

Вышеописанный код, это всего лишь пример работы с файлами, мы не должны забывать, что в ходе работы нашей программы, может произойти что то непредвиденное. Для таких случаев мы используем блок try…finally, о котором мы говорим чуть позже. Ниже пример, с блоком исключений:


try:

    file = open("text.txt", "r", encoding = "utf-8" )

finally:

    file.close()

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

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


with open("text.txt", "r", encoding = "utf-8" ) as file:

Чтение файлов JSON с помощью Pandas

Чтобы прочитать файл JSON с помощью Pandas, вызовем метод read_json() и передадим ему путь к файлу, который нужно прочитать. Метод возвращает DataFrame, который хранит данные в виде столбцов и строк.

Но сначала нужно установить библиотеку Pandas:

$ pip install pandas

Чтение JSON из локальных файлов

Приведенный ниже скрипт считывает файл patients.json из локальной системной директории и сохраняет результат во фрейме данных patients_df. Затем заголовок фрейма выводится с помощью метода head():

import pandas as pd
patients_df = pd.read_json('E:/datasets/patients.json')
patients_df.head()

Запуск этого кода должен дать следующий результат:

Следующий скрипт считает файл cars.json из локальной системы и затем вызовет метод head()cars_df для вывода заголовка:

cars_df = pd.read_json('E:/datasets/cars.json')
cars_df.head()

Результат запуска этого кода:

Чтение JSON из удаленных файлов

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

Давайте прочитаем и выведем заголовок из Iris Dataset:

import pandas as pd
iris_data = pd.read_json("https://raw.githubusercontent.com/domoritz/maps/master/data/iris.json")
iris_data.head()

Результат запуска этого кода:

Как создать DataFrame из файла JSON

Другой вариант – хранить данные в файле JSON, что очень популярно в настоящее время.

Для создания DataFrame из файла JSON можно использовать функцию pandas read_json, задав ей имя файла следующим образом pandas.read_jason(‘data.json’). Эта функция создает новый DataFrame с данными, содержащимися в предоставленном файле.

Создадим DataFrame с теми же данными, что и в предыдущих примерах, только в этом случае исходный файл будет в формате JSON:

Теперь вам остается только использовать функцию read_json, которая будет считывать данные из файла и создавать DataFrame:

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

Построение задачи

Перед нами стоит задача — сохранить данные из датасета «Ирис» в обычный текстовый документ и в .csv файл (сам датасет предоставит нам sklearn), а также сохранить все параметры модели в json и pickle файлы.

Начало работы

Сегодня в качестве среды разработки я буду использовать IntelJ IDEA со стандартным расширением для Python от JetBrains.

Импортируем все модули:

Согласно РЕР8, в начале файла мы импортируем только модули стандартной библиотеки. NumPy, Pandas и SkLearn вам придется установить с помощью пакетного менеджера pip/pip3.

Из подмодуля sklearn.datasets мы импортируем сам датасет, функцию разделения тренировочные/тестовые данные, а также сам класс модели логистической регрессии.

Чтение и запись файлов

Python предлагает различные методы для чтения и записи файлов, где каждая функция ведет себя по-разному. Следует отметить один важный момент – режим работы с файлами. Чтобы прочитать файл, вам нужно открыть файл в режиме чтения или записи. В то время, как для записи в файл на Python вам нужно, чтобы файл был открыт в режиме записи.

Вот некоторые функции Python, которые позволяют читать и записывать файлы:

  • read() – эта функция читает весь файл и возвращает строку;
  • readline() – эта функция считывает строки из этого файла и возвращает их в виде строки. Он выбирает строку n, если она вызывается n-й раз.
  • readlines() – эта функция возвращает список, в котором каждый элемент представляет собой одну строку этого файла.
  • readlines() – эта функция возвращает список, в котором каждый элемент представляет собой одну строку этого файла.
  • write() – эта функция записывает фиксированную последовательность символов в файл.
  • Writelines() – эта функция записывает список строк.
  • append() – эта функция добавляет строку в файл вместо перезаписи файла.

Возьмем пример файла «abc.txt» и прочитаем отдельные строки из файла с помощью цикла for:

#open the file
text_file = open('/Users/pankaj/abc.txt','r')

#get the list of line
line_list = text_file.readlines();

#for each line from the list, print the line
for line in line_list:
    print(line)

text_file.close() #don't forget to close the file

Вывод:

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

#open the file
text_file = open('/Users/pankaj/file.txt','w')

#initialize an empty list
word_list= []

#iterate 4 times
for i in range (1, 5):
    print("Please enter data: ")
    line = input() #take input
    word_list.append(line) #append to the list


text_file.writelines(word_list) #write 4 words to the file

text_file.close() #don’t forget to close the file

Вывод

Краткий обзор запросов HTTP

Запросы HTTP лежат в основе всемирной сети. Каждый раз, когда вы открываете веб-страницу, ваш браузер направляет множество запросов на сервер этой веб-страницы. Сервер отвечает на них, пересылая все необходимые данные для вывода страницы, и ваш браузер отображает страницу, чтобы вы могли увидеть ее.

В целом этот процесс выглядит так: клиент (например браузер или скрипт Python, использующий библиотеку Requests) отправляет данные на URL, а сервер с этим URL считывает данные, решает, что с ними делать, и отправляет клиенту ответ. После этого клиент может решить, что делать с полученными в ответе данными.

В составе запроса клиент отправляет данные по методу запроса. Наиболее распространенными методами запроса являются GET, POST и PUT. Запросы GET обычно предназначены только для чтения данных без их изменения, а запросы POST и PUT обычно предназначаются для изменения данных на сервере. Например, Stripe API позволяет использовать запросы POST для тарификации, чтобы пользователь мог купить что-нибудь в вашем приложении.

Примечание. В этой статье рассказывается о запросах GET, поскольку мы не собираемся изменять никакие данные на сервере.

При отправке запроса из скрипта Python или веб-приложения вы как разработчик решаете, что отправлять в каждом запросе и что делать с полученными ответами. Для начала отправим запрос на Scotch.io и используем API для перевода.

Сохраняем данные в JSON в Python

Если мы хотим записать информацию в JSON-формате, используя средства языка программирования Python, для начала надо подключить соответствующий json-модуль. Для этого нам пригодиться команда import json в самом начале кода.

Также стоит упомянуть метод dumps — он отвечает за автоматическую упаковку информации в JSON и принимает переменную, содержащую все необходимые данные.

import json
dictData = { "ID"        310450,
             "login"     "admin",
             "name"      "James Bond",
             "password"  "root",
             "phone"     3330303,
             "email"     " ",
             "online"    True }
jsonData = json.dumps(dictData)
print(jsonData)

{"ID" 310450, "login" "admin", "name" "James Bond", "password" "root", "phone" 3330303, "email" " ", "online" true}

Выполнив метод dumps, мы получим результат, который передастся в переменную с названием jsonData. То есть мы видим, что словарь dictData преобразовался в формат JSON всего лишь одной строчкой. А за счёт функции print вся информация была закодирована в изначальном виде. Также следует добавить, что сведения из поля online преобразовались из литерала True в true.

Теперь, используя Python, выполним запись json в файл. Чтобы это сделать, дополним предыдущий код:

with open("data.json", "w") as file
    file.write(jsonData)

Статистический анализ в Pandas

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

Ниже приводится список некоторых наиболее часто используемых функций для статистического анализа:

Метод Description
count() Подсчитывает количество всех непустых наблюдений
sum() Возвращает сумму элементов данных.
mean() Возвращает среднее значение всех элементов данных.
median() Возвращает медианное значение всех элементов данных.
mode() Возвращает режим всех элементов данных
std() Возвращает стандартное отклонение всех элементов данных.
min() Возвращает минимальный элемент данных среди всех входных элементов.
max() Возвращает максимальный элемент данных среди всех входных элементов.
abs() Возвращает абсолютное значение.
prod() Возвращает произведение значений данных.
cumsum() Возвращает кумулятивную сумму значений данных.
cumprod() Возвращает совокупное произведение значений данных.
describe() Он отображает статистическую сводку всех записей за один снимок, т.е. (сумма, количество, мин, среднее и т. Д.)

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

import pandas
import numpy


input = {'Name':pandas.Series(),
   'Marks':pandas.Series(),
   'Roll_num':pandas.Series()
}

#Creating a DataFrame
data_frame = pandas.DataFrame(input)
print(data_frame)

Выход:

    Name     Marks      Roll_num
0   John     44         1
1   Bran     48         2
2   Caret    75         3
3   Joha     33         4
4   Sam      99         5

Итоговая таблица

Мы рассмотрели несколько способов создания DataFrame с помощью pandas и Python. Если вы прочитали всю статью, то увидели, что все способы очень похожи, хотя каждый из них имеет свои особенности. Идея здесь в том, что пандас хочет сделать нашу жизнь проще, как вы видите.

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

Источник данных Пример
Данные отсутствуют
Список списков,список словарей df = pd.DataFrame(list)
Словарь списков df = pd.DataFrame(dictionary)
Массив NumPy df = pd.DataFrame(array)
Формат CSV
Файл с полямиполя фиксированной ширины df = pd.read_fwf(‘data.fwf’)
Данные в буфере обмена df = pd.read_clipboard()
Веб-файлы или файлы HTML
Электронная таблица df = pd.read_excel(‘data.xlsx’)
JSON-файл df = pd.read_json(‘data.json’)
База данных SQL
Другие форматы См. таблицу 2

Таблица 3: Сводка создания DataFrames из различных форматов исходных данных

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: