0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Box 模块的使用方法

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-17 11:05 次阅读

正常情况下,我们想访问字典中的某个值,都是通过中括号访问,比如:

test_dict = {"test": {"imdb stars": 6.7, "length": 104}}

print(test_dict["test"]["imdb stars"])
# 104

而通过Box模块,我们可以扩展字典功能,使用点符号访问元素:

from box import Box

movie_box = Box({ "Robin Hood: Men in Tights": { "imdb stars": 6.7, "length": 104 } })

movie_box.Robin_Hood_Men_in_Tights.imdb_stars
# 6.7

另外,可以看到默认情况下转换后,字典键值中的空格被转化为了下划线。

下面具体介绍 Box 模块的使用方法。

1.准备

开始之前,你要确保Pythonpip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install --upgrade python-box[all]

2.基本使用

我们可以像文章开头那样传入一个字典给 Box,生成一个Box对象;也可以直接使用参数赋值的方式生成一个Box对象:

from box import Box

my_box = Box(funny_movie='Hudson Hawk', best_movie='Kung Fu Panda')
my_box.funny_movie
# 'Hudson Hawk'

请记住,任何情况下,你往Box对象里添加字典或是数组,这些字典或数组都会被转变为Box对象:

my_box = Box({"team": {"red": {"leader": "Sarge", "members": []}}})
print(my_box.team.red.leader)
# Sarge

my_box.team.blue = {"leader": "Church", "members": []}
print(repr(my_box.team.blue))
#

访问列表中的 Box 对象也非常轻松:

my_box.team.red.members = [
    {"name": "Grif", "rank": "Minor Junior Private Negative First Class"},
    {"name": "Dick Simmons", "rank": "Captain"}
]

print(my_box.team.red.members[0].name)
# Grif

局限性

请注意,字典中有些默认方法,如: **clear, copy, fromkeys, get, items, keys, pop, popitem, setdefault, to_dict, update, merge_update, values ** ,当你的键值和这些方法名称冲突时,你无法使用点符号访问它们。

不过冲突时,你依然可以使用传统的字典取值访问它们,例如:

my_box['keys']

合并

要合并两个Box对象,你只需要通过 merge_update 方法:

from box import Box

box_1 = Box(val={'important_key': 1})
box_2 = Box(val={'less_important_key': 2})

box_1.merge_update(box_2)

print(box_1)
# {'val': {'important_key': 1, 'less_important_key': 2}}

当然,你也可以用传统的 update 方法:

from box import Box

box_1 = Box(val={'important_key': 1})
box_2 = Box(val={'less_important_key': 2})

box_1.update(box_2)

print(box_1)
# {'val': {'less_important_key': 2}}

转换为原始列表/字典

如果你需要把一个 Box 对象的字典转化为原始字典,.to_dict() 方法就可以帮你实现:

from box import Box

box_1 = Box(val={'important_key': 1})

print(box_1)
# {'val': {'less_important_key': 2}}
print(type(box_1))
# < class 'box.box.Box' >
print(type(box_1.to_dict()))
# < class 'dict' >

如果你需要把一个 Box 对象的列表转化为原始列表,你可以使用 .to_list() 方法:

from box import BoxList

my_boxlist = BoxList({'item': x} for x in range(10))
# 

my_boxlist[5].item
# 5

print(type(my_boxlist.to_list()))
# < class 'list' >

3.导入导出功能

Box对象有一个很方便的功能,就是能够轻松地将Box对象导出为 **Json / yaml / csv / msgpack **文件:

from box import BoxList

my_boxlist = BoxList({'item': x} for x in range(10))
# 

my_boxlist.to_json(filename="test.json")
# 在当前文件夹下生成一个 test.json 文件

此外,还能接受** Json / yaml / csv / msgpack **文件导入:

new_box = Box.from_json(filename="films.json")

各种类型的文件对应的方法如下:

转换器方法描述
to_dict递归地将所有 Box(和 BoxList)对象转换回字典(和列表)
to_json将 Box 对象另存为 JSON 字符串或使用filename参数写入文件
to_yaml将 Box 对象另存为 YAML 字符串或使用filename参数写入文件
to_msgpack将 Box 对象另存为 msgpack 字节或使用filename参数写入文件
to_toml*将 Box 对象另存为 TOML 字符串或使用filename参数写入文件
to_csv**将 BoxList 对象另存为 CSV 字符串或使用filename参数写入文件
from_jsonClassmethod,从一个 JSON 文件或字符串创建一个 Box 对象(所有 Box 参数都可以传递)
from_yaml类方法,从 YAML 文件或字符串创建一个 Box 对象(所有 Box 参数都可以传递)
from_msgpackClassmethod,从msgpack文件或字节创建一个Box对象(所有Box参数都可以传递)
from_toml*Classmethod,从TOML文件或字符串创建一个Box对象(所有Box参数都可以传递)
from_csv**Classmethod,从一个CSV文件或字符串创建一个BoxList对象(可以传递所有BoxList参数)
  • 不适用于 BoxList,仅适用于 Box ** 不适用于 Box,仅适用于 BoxList。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2484

    浏览量

    46530
  • BOX
    BOX
    +关注

    关注

    0

    文章

    15

    浏览量

    13118
  • 编辑器
    +关注

    关注

    1

    文章

    788

    浏览量

    30196
  • 数据分析
    +关注

    关注

    2

    文章

    1352

    浏览量

    33736
收藏 人收藏

    评论

    相关推荐

    红外寻迹模块使用方法

    `红外寻迹模块使用方法A) 检测到白色时指示灯亮,输出低电平 B)检测到黑色时指示灯灭,输出高电平`
    发表于 06-05 12:04

    天线的选择与使用方法

    无线模块的通信距离是一项重要指标,如何把有效通信距离最大化一直是大家疑惑的问题。本文根据调试经验及对天线的选择与使用方法做了一些说明,希望对工程师快速调试通信距离有所帮助。无线模块的通信距离是一项
    发表于 01-04 06:11

    小白求助关于4路红外循迹模块使用方法

    小白求助关于4路红外循迹模块使用方法
    发表于 10-13 06:35

    红外模块+电机驱动TB6612使用方法

    任务分析、红外模块+电机驱动TB6612使用方法
    发表于 01-07 07:57

    矩阵键盘的使用方法

    首先呢,大家都知道:历年的蓝桥杯单片机组都会考到按键模块;对于国赛来说,考矩阵键盘的概率远远高于独立按键,所以必须将矩阵键盘的用法吃透来。现在来给大家介绍矩阵键盘的使用方法(基于状态机)1、使用矩阵
    发表于 01-12 06:12

    S3C44BOX与LMO57QCIT01的接口方法及其应用

    本文着重介绍了ARM7处理器S3C44BOX内置LCD控制器的使用方法,简要介绍夏普LM057QC1TO1液晶显示模块以及它和S3C44BOX的接口
    发表于 11-23 15:41 28次下载

    IGBT驱动模块EXB841使用方法的改进

    IGBT驱动模块EXB841使用方法的改进 摘要: 本文对目前在电力电子技术中广泛使用的IGBT驱动模块EXB841的使用方法进行了改进,克服了EXB841本身的缺陷,提高了保护
    发表于 05-08 15:11 84次下载

    示波器的使用方法

    数字万用表使用方法和示波器的使用方法详解。
    发表于 03-14 10:38 31次下载

    AURORA的功能模块使用方法介绍

    本文将覆盖极光远程安全评估系统(以下简称极光或AURORA)的所有功能点,并详细介绍极光的主要功能模块使用方法
    发表于 09-22 16:36 12次下载
    AURORA的功能<b class='flag-5'>模块</b>和<b class='flag-5'>使用方法</b>介绍

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大家对示波器的
    的头像 发表于 12-24 20:37 2478次阅读

    三相电采集模块使用方法描述

    三相电采集模块使用方法描述
    的头像 发表于 12-28 15:04 1614次阅读

    STM32G0开发笔记:SD卡模块使用方法

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SD卡模块使用方法
    的头像 发表于 01-19 16:27 1414次阅读
    STM32G0开发笔记:SD卡<b class='flag-5'>模块</b>的<b class='flag-5'>使用方法</b>

    Channel模块使用方法示例

    。在本教程中,我们将介绍 Rust 语言中的 Tokio 模块 channel,并提供几个示例,以帮助您更好地理解它的使用方法。 什么是 Tokio 模块 Channel? Tokio 模块
    的头像 发表于 09-20 11:47 507次阅读

    Box 模块使用方法

    } })movie_box.Robin_Hood_Men_in_Tights.imdb_stars# 6.7 另外,可以看到默认情况下转换后,字典键值中的空格被转化为了下划线。 下面具体介绍 Box 模块
    的头像 发表于 10-31 10:40 283次阅读

    Camelot模块使用方法

    :JSON,Excel,HTML和Sqlite。 下面给大家介绍这个模块使用方法: 1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章: 超详细Python
    的头像 发表于 11-01 10:02 389次阅读
    Camelot<b class='flag-5'>模块</b>的<b class='flag-5'>使用方法</b>