Сообщить об ошибке.

Создание словаря Benedict из различных источников данных

Создать экземпляр Benedict можно непосредственно из внешнего источника данных (путь к файлу, URL-адрес или строка данных), передав в конструкторе источник данных и формат данных.

Простые примеры загрузки данных в словарь Benedict:

from benedict import benedict

# использование пути к файлу
d = benedict("/path/to/data.yml", format="yaml")

# использование URL
d = benedict("https://localhost:8000/data.xml", format="xml")
# или
d = benedict("https://localhost:8000/data/", format="json")

# использование строки данных
d = benedict('{"a": 1, "b": 2, "c": 3, "x": 7, "y": 8, "z": 9}')

Содержание:

Представленные ниже методы упрощают операции ввода-вывода с распространенными форматами данных: base64, csv, ini, json, pickle, plist, query-string, toml, xls, xml, yaml.

  • Во всех методах from_* первым аргументом может быть: URL, путь к файлу или строка данных.
  • Во всех методах to_*, если указан filepath='...', то выходные данные дополнительно будут сохранены по указанному пути к файлу.

Benedict.from_base64(s, subformat="json", encoding="utf-8", **kwargs):

Метод Benedict.from_base64() пробует загрузить/декодировать данные в формате base64 и вернуть их как экземпляр словаря Benedict.

  • Аргумент s может принимать: URL-адрес, путь к файлу или строку данных.
  • Аргумент subformat позволяет выбрать используемый подформат: ('csv', 'json', 'URL', 'toml', 'xml', 'yaml'), по умолчанию: 'json'.
  • Аргумент encoding позволяет выбрать кодировку, по умолчанию utf-8.

С помощью **kwargs можно передать определенные параметры для используемой функции base64.b64decode().

В случае сбоя возникает ошибка ValueError.

d = benedict.from_base64(filepath="path/to/base64/file.json", subformat="json")

Benedict.to_base64(subformat="json", encoding="utf-8", filepath=None, **kwargs):

Метод Benedict.to_base64() возвращает экземпляр dict, закодированный в формате base64, и при необходимости сохраняет его по указанному пути к файлу.

  • Аргумент subformat позволяет выбрать используемый подформат: ('csv', 'json', 'URL', 'toml', 'xml', 'yaml'), по умолчанию: 'json'.
  • Аргумент encoding позволяет выбрать кодировку, по умолчанию utf-8.

С помощью **kwargs можно передать определенные параметры для используемой функции base64.b64encode().

В случае сбоя возникает ошибка ValueError.

d.to_base64(subformat="json", filepath="path/to/save/file.json")

Benedict.from_csv(s, columns=None, columns_row=True, **kwargs):

Метод Benedict.from_csv() пробует загрузить/декодировать данные в формате csv и вернуть их как экземпляр Benedict.

  • Аргумент s может принимать: URL-адрес, путь к файлу или строку данных.
  • Аргумент columns позволяет указать имена столбцов csv (используются в качестве ключей словаря), в случае его отсутствия. По умолчанию: None - в этом случае в качестве ключей будут использоваться значения первой строки csv.
  • Аргумент columns_row отвечает за использование значений первой строки csv в качестве данных словаря. По умолчанию: True - первая строка csv используется в качестве ключей. Если columns_row=False, то первая строка csv используется как данные и в этом случае columns должен содержать список имен столбцов.

С помощью **kwargs можно передать дополнительные аргументы в используемую функцию csv.reader().

В случае сбоя возникает ошибка ValueError.

from benedict import benedict
# есть строка в формате `csv` 
# (можно указать путь к файлу), 
# которая не имеет имен столбцов
s = ("Alice,Computer Science\nBob,Electrical Engineering\n"
     "Charlie,Mathematics\nJack,Mathematics")
d = benedict.from_csv(s, columns=['col1', 'col2'], columns_row=False)
print(d.dump())
# {
#     "values": [
#         {"col1": "Alice", "col2": "Computer Science"},
#         {"col1": "Bob", "col2": "Electrical Engineering"},
#         {"col1": "Charlie", "col2": "Mathematics"},
#         {"col1": "Jack", "col2": "Mathematics"}
#     ]
# }

Benedict.to_csv(key="values", columns=None, columns_row=True, filepath=None, **kwargs):

Метод Benedict.to_csv() возвращает список словарей в текущем словаре, закодированных в формате csv, и при необходимости сохраняет его по указанному пути к файлу filepath.

  • Аргумент key указывает на ключ элемента словаря benedict, который содержит список словарей для выгрузки, по умолчанию: 'values'.
  • Аргумент columns позволяет указать список ключей, которые необходимо выгрузить. По умолчанию: None - будут использоваться все ключи из первого элемента списка словарей.
  • Аргумент columns_row отвечает за вывод первой строки, которая содержит имена столбцов (ключей).

С помощью **kwargs можно передать дополнительные аргументы в используемую функцию csv.writer().

В случае сбоя возникает ValueError.

from benedict import benedict

data = {
    'students': [
        {'name': 'Alice', 'age': 20, 'major': 'Computer Science'},
        {'name': 'Bob', 'age': 21, 'major': 'Electrical Engineering'},
        {'name': 'Charlie', 'age': 19, 'major': 'Mathematics'},
        {'name': 'Jack', 'age': 16, 'major': 'Mathematics'},
    ],
    'employees': [
        {'name': 'Josh', 'age': 24, 'major': 'Mathematics'},
        {'name': 'Lindsey', 'age': 24, 'major': 'Computer Science'},
        {'name': 'Steve', 'age': 42, 'major': 'Electrical Engineering'},
        {'name': 'Tina', 'age': 30, 'major': 'Computer Science'},
    ]
}

d = benedict(data)
# создаем `csv` без строки, содержащей имена столбцов
s = d.to_csv(key="students", columns=['name', 'major'], columns_row=False)
print(s)
# Alice,Computer Science
# Bob,Electrical Engineering
# Charlie,Mathematics
# Jack,Mathematics

Benedict.from_ini(s, **kwargs):

Метод Benedict.from_ini() пробует загрузить/декодировать данные, закодированные в ini формате, и возвращает их как экземпляр Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем configparser, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

from benedict import benedict

s = """
[DEFAULT]
AliveInterval = 45
ForwardX11 = yes

[one]
User = hg

[two]
Port = 50022
ForwardX11 = no
"""

d = benedict.from_ini(s)
print(d.dump())
# {
#     "aliveinterval": 45,
#     "forwardx11": true,
#     "one": {
#         "aliveinterval": 45,
#         "forwardx11": true,
#         "user": "hg"
#     },
#     "two": {
#         "aliveinterval": 45,
#         "forwardx11": false,
#         "port": 50022
#     }
# }

Benedict.to_ini(filepath, **kwargs):

Метод Benedict.to_ini() возвращает экземпляр словаря dict, закодированный в формате ini, и при необходимости сохраните его по указанному пути к файлу filepath.

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем configparser, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

# выгрузим получившийся словарь 
# из примера `benedict.from_ini()`
s = d.to_ini()
print(s)
# [DEFAULT]
# aliveinterval = 45
# forwardx11 = True
# 
# [one]
# aliveinterval = 45
# forwardx11 = True
# user = hg
# 
# [two]
# aliveinterval = 45
# forwardx11 = False
# port = 50022

Benedict.from_json(s, **kwargs):

Метод Benedict.from_json() пробует загрузить/декодировать данные в формате json и вернуть их как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем json, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

from benedict import benedict

data = {
    'name': 'Josh',
    'occupation': 'Data scientist',
    'awesome': '',
    'skills': {
        'prog': {
            'Python': '5 stars',
            'JS': '4 stars'
        }
    }
}

d = benedict.from_json(data)
print(d.dump())
# {
#     "awesome": "",
#     "name": "Josh",
#     "occupation": "Data scientist",
#     "skills": {
#         "prog": {
#             "JS": "4 stars",
#             "Python": "5 stars"
#         }
#     }
# }

Benedict.to_json(filepath=None, **kwargs):

Метод Benedict.to_json() возвращает экземпляр словаря dict в формате json, при необходимости сохраняет его по указанному пути к файлу filepath в виде строки.

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем json, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

# выгрузим получившийся словарь 
# из примера `benedict.from_json()`
s = d.to_json()
print(s)
# '{"name": "Josh", "occupation": "Data scientist", "awesome": "", "skills": {"prog": {"Python": "5 stars", "JS": "4 stars"}}}'

Benedict.from_pickle(s, **kwargs):

Метод Benedict.from_pickle() пробует загрузить/декодировать данные s в формате pickle, закодированные Base64, и возвращает его как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем pickle, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.to_pickle(filepath=None, **kwargs):

Метод Benedict.to_pickle() возвращает экземпляр словаря dict в формате pickle, закодированные Base64, данные при необходимости можно сохранить, передав аргумент filepath в виде строки.

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем pickle, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.from_plist(s, **kwargs):

Метод Benedict.from_plist() пробует загрузить/декодировать данные s в формате Apple .plist и возвращает его как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем plistlib, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.to_plist(filepath=None, **kwargs):

Метод Benedict.to_plist() возвращает экземпляр словаря dict в формате Apple .plist, данные при необходимости можно сохранить, передав аргумент filepath в виде строки.

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем pickle(), при выполнении соответствующей операции.

Benedict.from_query_string(s, **kwargs):

Метод Benedict.from_query_string() пробует загрузить/декодировать данные в формате query-string и вернуть их как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных.

В случае сбоя возникает ошибка ValueError.

Benedict.to_query_string(filepath=None, **kwargs):

Метод Benedict.to_query_string() возвращает экземпляр словаря dict в формате query-string, при необходимости сохраняет его по указанному пути к файлу filepath в виде строки.

В случае сбоя возникает ошибка ValueError.

Benedict.from_toml(s, **kwargs):

Метод Benedict.from_toml() пробует загрузить/декодировать данные, закодированные в формате toml, и возвращает их как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем toml, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.to_toml(filepath=None, **kwargs):

Метод Benedict.to_toml() возвращает экземпляр словаря dict в формате toml, при необходимости сохраняет его по указанному пути к файлу filepath в виде строки.

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем toml, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.from_xls(s, sheet=0, columns=None, columns_row=True, **kwargs):

Метод Benedict.from_xls() пробует загрузить/декодировать данные, представленные в формате электронных таблиц .xml и .xmls, и возвращает их как экземпляр словаря Benedict.

  • Аргумент s может принимать: URL-адрес, путь к файлу или строку данных.
  • Аргумент sheet это рабочего листа книги Excel.
  • Аргумент columns позволяет указать имена столбцов csv (используются в качестве ключей словаря), в случае его отсутствия. По умолчанию: None - в этом случае в качестве ключей будут использоваться значения первой строки csv.
  • Аргумент columns_row отвечает за использование значений первой строки csv в качестве данных словаря. По умолчанию: True - первая строка csv используется в качестве ключей. Если columns_row=False, то первая строка csv используется как данные и в этом случае columns должен содержать список имен столбцов.

Подробнее об использовании аргументов смотрите в примерах к методу Benedict.from_csv().

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулями:

  • openpyxl для файлов .xlsx и .xlsm.
  • xlrd для файлов .xls.

В случае сбоя возникает ошибка ValueError.

Benedict.from_xml(s, **kwargs):

Метод Benedict.from_xml() пробует загрузить/декодировать данные, закодированные в формате xml, и возвращает их как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем xmltodict, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.to_xml(**kwargs):

Метод Benedict.to_xml() возвращает экземпляр словаря dict в формате xml, при необходимости сохраняет его по указанному пути к файлу filepath в виде строки.

В случае сбоя возникает ошибка ValueError.

Benedict.from_yaml(s, **kwargs):

Свойство Benedict.from_yaml пробует загрузить/декодировать данные, закодированные в yaml формате, и возвращает их как экземпляр словаря Benedict.

Аргумент s может принимать: URL-адрес, путь к файлу или строку данных. С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем pyyaml, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.

Benedict.to_yaml(filepath=None, **kwargs):

Свойство Benedict.to_yaml возвращает экземпляр словаря dict в формате yaml, при необходимости сохраняет его по указанному пути к файлу filepath в виде строки.

С помощью **kwargs можно передать дополнительные аргументы, принимаемые модулем pyyaml, при выполнении соответствующей операции.

В случае сбоя возникает ошибка ValueError.