Skip to main content

以通用格式存储机器人数据的库

项目描述

图片

收藏者

操作状态 GitHub 最新版本 图片 图片 PyPI - 下载

这仍在大力发展中

这背后的想法是一个容器,可以存储数据并在捕获数据时对数据进行时间标记。主要结构是一个字典,其中存储了每个数据系列的键。

这是为我教授的机器人课程而写的。它旨在简单并教给学生一些东西。那里可能有更好的解决方案,但我喜欢这个。

此外,它的作用并没有什么神奇之处:

  • 它提供了一个通用接口来使用picklejson作为将数据保存到磁盘的协议
  • 如果需要,它还允许您在它们之间进行转换
  • 可以使用原始协议读取包文件,因此如果该库消失,数据永远不会丢失
  • 设计简单直接

设置

安装

建议的安装方法是通过以下pip命令:

pip install the_collector
pip install the_collector[numpy]

如果您安装numpy,那么您可以使用以下函数访问 numpy 数组:array_pack()array_pack(). 这些真的不能为你节省太多。

用法

包包

Bag 将数据存储在内存中,直到达到缓冲区大小限制,然后将数据转储到文件中。

#!/usr/bin/env python3
from the_collector import BagIt
from the_collector import Json, Pickle
import json


d = {'a': 1, 'b': 2}

bag = BagIt(Json)      # ascii, cross platform
# bag = BagIt(Pickle)  # binary, python only but handles python objects well

for i in range(10):
    bag.push('test', d) # push value d to key 'test'
    bag.push('bob', d)
    bag.push('tom', ('a', i,))

# timestamp adds a timestamp automatically to the bag file. Thus, you won't
# over write bob.json.bag each time you run this program because the filename
# is bob-2019-04-20-15:35:25.6543.json.bag
fname = bag.write('bob', timestamp=False)

print(">> created:", fname)

data = bag.read(fname) # data is just a dictionary
print(data)

现在,由于打包数据并没有什么特别之处the_collector,您始终可以使用原始库读取包文件:

with open(fname, 'rb') as fd:
    data = json.load(fd)

for key, val in data.items():
    print("{}[{}]".format(key, len(val)))
    for v in val:
        print("{}".format(v), end=' ')
        print(' ')

圆形缓冲器

这可能有点不合适,但我使用循环缓冲区来处理数据,所以我把它放在这个库中。

from the_collector import CircularBuffer

cb = CircularBuffer(60)  # can only hold 60 items before it copies over data

# Let's push way more than 60 things
for i in range(200):
    cb.push(i)

print(cb.get_all())  # print everything
print('get cb[7]', cb[7])
print('get cb[0]', cb[0])
print('get last', cb.get_last())

数据元组

使用泛型namedtuple进行数据存储。创建时会自动插入时间戳。这对于使用时间戳标记数据很有用,而不必记住自己做。

警告json并且msgpack对. tuples_ pickle_ json_ 无论哪种方式,您仍然保留时间戳。msgpacktuple

from the_collector import Data

d = Data((1,2,3,))  # timestamp generate when made

print("Data[{}]: {}".format(d.timestamp, d.data))
print("Namedtuple output:", d)

去做

  • 添加 github 操作
  • 查看启用BytesIO测试/工作,这样您就不会在文件系统中乱扔测试包文件
  • 支持 PEP517 并替换setup.pypyprogram.toml
  • 将测试从 移动nosepytest
  • remove ,与(仅限python)或(跨平台)msgpack相比没有优势picklejson
  • 重新添加json压缩

更改日志

日期 版本 笔记
2020-04-19 0.8.5 移除msgpack
2019-07-06 0.8.2 添加通用数据容器
2019-04-28 0.8.0 json可以使用、pickle或存储数据msgpack
2018-07-25 0.7.0 添加msgpack消息和自定义消息的方法
2018-07-14 0.6.0 更改了接口以支持缓冲写入磁盘
2018-07-09 0.5.0 搬离json现在使用msgpack
2017-11-23 0.4.0 修复、文档、单元测试
2017-10-04 0.0.1 在里面

麻省理工学院许可证 (MIT)

版权所有 (c) 2017 Kevin J. Walchko

特此免费授予任何人获得本软件和相关文档文件(“软件”)的副本,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。

本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同、侵权或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

the_collector-0.9.0.tar.gz (16.7 kB 查看哈希

已上传 source

内置分布

the_collector-0.9.0-py3-none-any.whl (18.5 kB 图哈希)

已上传 py3