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

Приведение данных к определенному типу в словаре python-benedict

Разбор/парсинг значений ключей словаря python-benedict

Представленные в материале методы словаря python-benedict являются обертками метода dict.get(), они анализируют данные, пытаясь вернуть их в ожидаемом виде.

Пример использования методов:

from benedict import benedict
from datetime import date

# ДАТА
data = {'d': '10/10/2023', 'd1': '2023-10-5'}
d = benedict(data)
d.get_date('d')
# datetime.date(2023, 10, 10)

# дата входит в `choices`
d.get_date('d', format='%d/%m/%Y', default=date(2023, 10, 1), 
           choices=[date(2023, 10, 9), date(2023, 10, 10)])
# datetime.date(2023, 10, 10)

# дата не входит в `choices`
d.get_date('d1', format='%Y-%m-%d', default=date(2023, 10, 1), 
           choices=[date(2023, 10, 9), date(2023, 10, 10)])
# datetime.date(2023, 10, 1)

# СПИСОК ДАТ
data = {'d': '5/10/2023,10/10/2023'}
>>> d = benedict(data)
>>> d.get_date_list('d', format='%d/%m/%Y')
# [datetime.date(2023, 10, 5), datetime.date(2023, 10, 10)]


# ЧИСЛА
data = {'d': '202'}
d = benedict(data)
d.get_float('d')
# 202.0

# СПИСОК ЧИСЕЛ
data = {'d': '202.3, 15, 15.9, один'}
d = benedict(data)
d.get_float_list('d')
# [202.3, 15.0, 15.9, None]

Содержание:


Benedict.get_bool(key, default=False):

Метод Benedict.get_bool() получает значение по ключу или пути к ключу key, пытаясь вернуть его как значение bool.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если значение ключа key не может быть интерпретировано, то возвращается значение default.

Такие значения, как 1, true, yes, on, ok, будут возвращены как True.

Benedict.get_bool_list(key, default=[], separator=","):

Метод Benedict.get_bool_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка значений bool.

Аргумент default должен быть списком объектов bool.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator и значение является строкой, то она будет разделена по separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значения, указанное в default.

Такие значения, как 1, true, yes, on, ok, будут возвращены как True.

Benedict.get_date(key, default=None, format=None, choices=[]):

Метод Benedict.get_date() получает значение по ключу или пути к ключу key, пытаясь вернуть его как объект datetime.date().

Аргумент choices должен быть списком объектов datetime.date.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан choices, а преобразованное значение ключа key совпадает с любым значением из choices, то возвращается преобразованное значение ключа, иначе возвращается значение default или None, если default не определено.
  • Если строка формата format не указана (формат в котором записаны значения ключей), то модуль benedict постарается определить его автоматически.
data = {'d': '10/10/2023', 'd1': '2023-10-5'}
d = benedict(data)
d.get_date('d')
# datetime.date(2023, 10, 10)

# дата входит в `choices`
d.get_date('d', format='%d/%m/%Y', default=date(2023, 10, 1), 
           choices=[date(2023, 10, 9), date(2023, 10, 10)])
# datetime.date(2023, 10, 10)

# дата не входит в `choices`
d.get_date('d1', format='%Y-%m-%d', default=date(2023, 10, 1), 
           choices=[date(2023, 10, 9), date(2023, 10, 10)])
# datetime.date(2023, 10, 1)

Benedict.get_date_list(key, default=[], format=None, separator=","):

Метод Benedict.get_date_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка объектов datetime.date().

Аргумент default должен быть списком объектов datetime.date.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если строка формата даты format не указана (формат в котором записаны значения ключей), то модуль benedict постарается определить его автоматически.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение [None].
from benedict import benedict
from datetime import date
data = {'d': '5/10/2023,10/10/2023'}
d = benedict(data)
#  зададим формат даты
d.get_date_list('d', format='%d/%m/%Y')
# [datetime.date(2023, 10, 5), datetime.date(2023, 10, 10)]

# автоматическое распознавание даты, обратите
# внимание как интерпретировалась первая дата
d.get_date_list('d')
# [datetime.date(2023, 5, 10), datetime.date(2023, 10, 10)]

Benedict.get_datetime(key, default=None, format=None, choices=[]):

Метод Benedict.get_datetime() получает значение по ключу или пути к ключу key, пытаясь вернуть его как объект datetime.datetime().

Аргумент choices должен быть списком объектов datetime.datetime.

  • Если значение ключа key не существует или не может быть интерпретировано, а default не определено, то возвращается None.
  • Если указан choices, а преобразованное значение ключа key совпадает с любым значением из choices, то возвращается преобразованное значение ключа, иначе возвращается значение default или None, если default не определено.
  • Если строка формата format не указана (формат в котором записаны значения ключей), то модуль benedict постарается определить его автоматически.

Пример использования аналогичен методу Benedict.get_date().

Benedict.get_datetime_list(key, default=[], format=None, separator=","):

Метод Benedict.get_datetime_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка объектов datetime.datetime().

Аргумент default должен быть списком объектов datetime.datetime.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если строка формата даты format не указана (формат в котором записаны значения ключей), то модуль benedict постарается определить его автоматически.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение [None].

Пример использования аналогичен методу Benedict.get_date_list().

Benedict.get_decimal(key, default=Decimal("0.0"), choices=[]):

Метод Benedict.get_decimal() получает значение по ключу или пути к ключу key, пытаясь вернуть его как объект decimal.Decimal.

Аргумент choices должен быть списком объектов decimal.Decimal.

  • Если значение ключа key не существует или его значение не может быть интерпретировано, а default не определено, то возвращается None.
  • Если указан choices, а преобразованное значение ключа key совпадает с любым значением из choices, то возвращается преобразованное значение ключа, иначе возвращается значение default.

Benedict.get_decimal_list(key, default=[], separator=","):

Метод Benedict.get_decimal_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка объектов decimal.Decimal.

Аргумент default должен быть списком объектов decimal.Decimal.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение [None].

Benedict.get_dict(key, default={}):

Метод Benedict.get_dict() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде объекта словаря dict.

  • Если значение ключа key не существует или его значение не может быть интерпретировано, а default не определено, то возвращается None.
  • Если значение представляет собой строку json, то оно будет автоматически декодировано python-benedict.

Benedict.get_email(key, default="", choices=None, check_blacklist=True):

Метод Benedict.get_email() получает значение email-адреса по ключу или пути к ключу key и проверяет его валидность.

  • Если значение ключа key не существует или его значение не может быть интерпретировано, а default не определено, то возвращается None.
  • Если извлеченный email-адрес занесен в черный список, то его значение будет автоматически проигнорировано.
  • Если значение check_blacklist имеет значение False, то он не будет проигнорирован.

Benedict.get_float(key, default=0.0, choices=[]):

Метод Benedict.get_float() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде числа float.

Аргумент choices должен быть списком объектов float.

  • Если значение ключа key не существует или его значение не может быть интерпретировано, а default не определено, то возвращается значение None.
  • Если указан choices, а преобразованное значение ключа key совпадает с любым значением из choices, то возвращается преобразованное значение ключа, иначе возвращается значение default.
>>> from benedict import benedict
>>> data = {'d': '202.3'}
>>> d = benedict(data)
>>> d.get_float('d', choices=[202.5, 202.3])
# 202.3

# преобразованное число не входи в список `choices`
>>> d.get_float('d', choices=[202.5, 202.4])
# 0.0

Benedict.get_float_list(key, default=[], separator=","):

Метод Benedict.get_float_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка объектов float.

Аргумент default должен быть списком объектов float.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение [None].
>>> from benedict import benedict
>>> data = {'d': '202.3, 100, 10,5'}
>>> d = benedict(data)
>>> d.get_float_list('d')
# [202.3, 100.0, 10.0, 5.0]

# другой разделитель
>>> data = {'d': '202.3|100|10,5'}
>>> d = benedict(data)
>>> d.get_float_list('d', separator='|')
# [202.3, 100.0, None]

Benedict.get_int(key, default=0, choices=[]):

Метод Benedict.get_int() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде числа int.

Аргумент choices должен быть списком объектов int.

  • Если значение ключа key не существует или его значение не может быть интерпретировано, а default не определено, то возвращается значение None.
  • Если указан choices, а преобразованное значение ключа key совпадает с любым значением из choices, то возвращается преобразованное значение ключа, иначе возвращается значение default.

Benedict.get_int_list(key, default=[], separator=","):

Метод Benedict.get_int_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка объектов int.

Аргумент default должен быть списком объектов int.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение [None].

Benedict.get_list(key, default=[], separator=","):

Метод Benedict.get_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде объекта list.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение [None].

Benedict.get_list_item(key, index=0, default=None, separator=","):

Метод Benedict.get_list_item() получает значение по ключу или пути к ключу key и пытается из полученного списка вернуть значение по указанному индексу index.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator и значение key является строкой, то она будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается значение None.

Benedict.get_str(key, default="", choices=[]):

Метод Benedict.get_str() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде объекта str.

Аргумент choices должен быть списком объектов str.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан choices, а преобразованное значение ключа key совпадает с любым значением из choices, то возвращается преобразованное значение ключа, иначе возвращается значение default.

Benedict.get_str_list(key, default=[], separator=","):

Метод Benedict.get_str_list() получает значение по ключу или пути к ключу key, пытаясь вернуть его в виде списка строк.

  • Если значение ключа key не существует, а default не определено, то возвращается None.
  • Если указан разделитель separator, то строка будет разделена по значению separator на список строк.
  • Если значение ключа key не может быть интерпретировано как список строк, то возвращается [строка].