pickle/cPickle操作函数、对象及在ROS中发布复杂消息
来源:互联网 发布:mac 照片 导出 编辑:程序博客网 时间:2024/06/05 21:09
- 简介
- 主要接口
- API使用举例
- 操作复杂对象
- 和ROS结合
简介
官方API
这个模块主要是做数据串行化和串行化数据解析的,pickle是python语言的库,cPickle是C语言写的,后者的执行速度是前者的1000倍。但是cPickle对少数模块不支持。
使用这两个库的数据必须是python相关的,否则其他非python语言可能无法解析这些串行化数据。
主要接口
pickle.dump(obj, file[, protocol])#Write a pickled representation of obj to the open file object file.#protocol 这里默认是0, 保存的文件在一些编辑器会显示奇怪,用2可以解决这个问题,下同。pickle.load(file)#Read a string from the open file object file and interpret it as a pickle data stream, reconstructing and returning the original object hierarchy.pickle.dumps(obj[, protocol])#Return the pickled representation of the object as a string, instead of writing it to a file.pickle.loads(string)#Read a pickled object hierarchy from a string.
API使用举例
import pickle# import cPickle as ...pickle.dump("123", open("test.txt","wb")) #pickle into filestr1 = pickle.load(open("test.txt","rb")) #load from pickled file
当然在dump或者load过程中遇到错误会有异常抛出,可以查看上面的API获取异常的类型。
操作复杂对象
pickle操作复杂数据结构或者对象、函数等:
#!/usr/bin/env python#-*- coding:utf-8 -*-#############################File Name: pickle_test.py#Author: Wang #Mail: wang@hotmail.com#Created Time:2017-09-23 16:56:53############################from pickle import *my_dict = {'name':'wang', 'age':15}print "initial dict: ", my_dictss = dumps(my_dict)tt = loads(ss)print "loaded dict: ", ttdef my_func(x, y): print "the number inputted: %d,%d, sum is: "%(x,y), return x + yss = dumps(my_func)tt = loads(ss)print "loaded function: ", tt(2,4)import numpy as npclass My_class: def __init__(self): self.name = "Lee" self.sex = "male" self.index = np.array([1,2,3]) def set_name(self, newname): self.name = newname def get_sub(self, a, b): return a - bmy_obj = My_class()my_obj.set_name("Zhao")print my_objss = dumps(my_obj)tt = loads(ss)print ttprint tt.name, tt.index, tt.get_sub(12,10)'''Results:initial dict: {'age': 15, 'name': 'wang'}loaded dict: {'age': 15, 'name': 'wang'}loaded function: the number inputted: 2,4, sum is: 6<__main__.My_class instance at 0x7f917a3c42d8><__main__.My_class instance at 0x7f9162d8d290>Zhao [1 2 3] 2 '''
从上面结果知,pickle可以处理python的函数、复杂数据和对象,但是对象存储也是把之前的对象拷贝下来,比如这里打印结果是Zhao不是初始化的Wang。
和ROS结合
这里dumps()将数据压缩成字符串格式,在rospy里面可以把这种String消息类型发出去,从而实现在ros里复杂结构、函数和对象的发布。举例:
#!/usr/bin/env python# license removed for brevityimport rospyfrom std_msgs.msg import Stringfrom pickle import *import numpy as npclass My_class: def __init__(self): self.name = "Lee" self.sex = "male" self.index = np.array([1,2,3]) def set_name(self, newname): self.name = newname def get_sub(self, a, b): return a - bdef talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = dumps(My_class) rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep()if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass
阅读全文
0 0
- pickle/cPickle操作函数、对象及在ROS中发布复杂消息
- pickle及cPickle模块
- pickle, cPickle 模块:序列化 Python 对象
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- pickle和cPickle:Python对象的序列化
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- pickle和cPickle——python对象序列化
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python标准库05 存储对象 (pickle包,cPickle包)
- ROS中节点在每次接收到消息之后都发布一条消息的反馈topic
- python: pickle cpickle
- python pickle, cPickle 模块
- ccf 游戏 bfs
- 分清tcp/ip与http
- sql中having和where的区别
- 树形菜单构造
- 蚁群算法路径规划TSP
- pickle/cPickle操作函数、对象及在ROS中发布复杂消息
- Spring @Configuration 和 @Component 区别
- python-爬取淘宝商品
- Android 终端的退出
- 博弈
- php -- PDO属性设置
- 文本处理工具awk
- C中的struct与C++中的struct区别以及C++中的struct与C++中的class的区别
- 如何部署vuejs项目到Tomcat上