pickle/cPickle操作函式、物件及在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 file
str1 = 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: [email protected]
#Created Time:2017-09-23 16:56:53
############################
from pickle import *
my_dict = {'name':'wang', 'age':15}
print "initial dict: ", my_dict
ss = dumps(my_dict)
tt = loads(ss)
print "loaded dict: ", tt
def my_func(x, y):
print "the number inputted: %d,%d, sum is: "%(x,y),
return x + y
ss = dumps(my_func)
tt = loads(ss)
print "loaded function: ", tt(2,4)
import numpy as np
class 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 - b
my_obj = My_class()
my_obj.set_name("Zhao")
print my_obj
ss = dumps(my_obj)
tt = loads(ss)
print tt
print 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 brevity
import rospy
from std_msgs.msg import String
from pickle import *
import numpy as np
class 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 - b
def 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
相關推薦
pickle/cPickle操作函式、物件及在ROS中釋出複雜訊息
簡介 官方API 這個模組主要是做資料序列化和序列化資料解析的,pickle是python語言的庫,cPickle是C語言寫的,後者的執行速度是前者的1000倍。但是cPickle對少數模組不支援。 使用這兩個庫的資料必須是python相關的,否則其
函式、物件在記憶體中存在形式
一、php底層記憶體分割槽 php將記憶體分為5個區。堆區一般存物件,棧區一般存基本資料型別(普通變數……)和函式,全域性區存全域性變數和靜態變數,常量區存常量,程式碼區存程式碼。 二、函式呼叫時棧區變化 這是一個簡單的遞迴函式示例。當主函式呼叫counts函式時,開闢
《隨筆一》——C#中的“靜態建構函式、物件初始化語句”
靜態建構函式 ● 我們在使用類中的靜態成員時,先要初始化這些成員。 在宣告靜態成員時、可以同時提供一個初始值。 但有時候我們需要執行更復雜的初始化操作, 這應該怎麼辦呢? ● 我們可以把建構函式宣告成static的, 一般來說, 靜態的建構函式初始化類的靜態欄位
MATLAB、OpenCV及Ros下相機內參標定整理
轉載自:https://blog.csdn.net/yph001/article/details/80287853 一、引言 關於相機標定,其主要可以在MATLAB、OpenCv和ros下進行標定,標定方法很大一部分是參考張正友標定的方法。 二、MATLAB環境下相機標定方法
javascript中函式、物件、原型鏈等的深入自我理解
js中以物件為核心,所有皆物件。 狹義的講,js中的物件比較純粹,就是一個大括號包裹的鍵值對,鍵為名(有待深入解析,可能就是語法本身),值為物件。 這個基本要素和C++比較接近,並沒有憑空創造出新的語法來完成這個物件(類)的構造過程。 函式本身是物件,可以作為物件中的值
深入理解JavaScript函式、建構函式、物件、prototype(原型物件)的關係。
學了這麼久前端,一直搞不明白函式與物件之間的關係,實在慚愧,是時候總結一下了。。以下是學習時的記錄,若有錯誤之處,請指出。。 首先我們要知道js中的資料型別有以下幾種: Number Boolean undefined Object &
【Java-16】Java中字串表示、字串一些重要操作函式、整數與字串轉換
Java中有一個字串型別String,實際上確切說是有一個字串類,而類可以等價看作一個數據型別,所以我們就把String看成字串型別,String[]自然就是字串陣列,且對於每一個字串其都附帶很多方法,如字串切割等,具體看程式碼註釋解釋 package array; public class
小程式開發之元件事件處理函式、route及setData介紹
元件事件處理函式 Page 中還可以定義元件事件處理函式。在渲染層的元件中加入事件繫結,當事件被觸發時,就會執行 Page 中定義的事件處理函式。 .wxml <view bindtap="viewTap">click me</view> .js
軟體測試的定義、物件及原則
軟體測試的定義:為了發現錯誤執行程式的過程。 軟體測試的物件:需求分析、概要設計、詳細設計以及程式編碼等各階段所得到的文件,包括需求規格說明、概要設計規格說明、詳細設計規格說明以及源程式。 軟體測試
this指標在普通函式、物件方法、定時器、建構函式、事件函式、call()、apply()中的執行
前導: this是JavaScript中的一個關鍵字,在不同的場景中,this指向的物件也不同。在其他面嚮物件語言中(如C#),this就是指向當前物件。而在JavaScript 中this是在程式碼執行時繫結的,相對而言this指向比較混亂。在程式碼執行時th
python_11(format、轉義字元、連線字元、字串操作函式、字串反轉)
——————–資料格式化—————————- #!/usr/bin/python # -*- coding: UTF-8 -*- # 格式化字串 str1 = "version" num = 1
玩轉Unity資源、物件及序列化(上)(下)
如果在Unity編輯器處於關閉狀態時丟失.meta檔案,或資原始檔被移動但沒有移動對應的.meta檔案時,所有對資原始檔中的Object的引用都會丟失 複合資源和匯入器 正如前面第一節[深入理解資源與物件]中所說的一樣,不能被Unity直接支援的資源型別必須經過匯入才可以使用——使用資源匯入器來完成
Day40、this指標和常函式、解構函式、物件的建立和銷燬過程、拷貝構造和拷貝賦值(深拷貝、淺拷貝!)
一、 this和常函式 1、 this 指標 1) 類中的建構函式和成員函式都隱藏一個該類型別的指標引數,引數名為this。 2) 對於普通的成員函式,this指標就是指向呼叫該函式的物件 3) 對於建構函式,this指標指向正
編寫高質量程式碼:改善Java程式的151個建議(第3章:類、物件及方法___建議31~40)
書讀的多而不思考,你會覺得自己知道的很多。 書讀的多而思考,你會覺得自己不懂的越來越多。 -----江疏影 在面向
python基本操作-檔案、目錄及路徑
[toc] > 使用python的os模組,簡單方便完成對資料夾、檔案及路徑的管理與訪問操作。 ## 1 前言 在最近開發中,經常需要對檔案進行讀取、遍歷、修改等操作,想要快速、簡單的完成這些操作,我選擇用 python 。通過 python 的標準內建 os 模組,只需要幾行程式碼,即可完成想
java類和物件及python中的類似實現
一:java類和物件 首先,我們簡單說一下類和物件的理解:所有男的這相當於一個“類”,而某個具體的人就是一個“物件” 類:當做物件的模板 物件:根據類建立,在java中,使用關鍵詞new建立新物件 java中定義一個類: public class Dog { String
中文亂碼解決之一 JS的編碼、解碼及C#中對應的解碼、編碼
JS的編碼、解碼及C#中對應的解碼、編碼 1、escape 定義和用法 escape對字串資料編碼,如果是對url進行編碼必須用encodeURI或是encodeURLComponent,解碼使用:unescape。 返回值 字符集是unicode,編碼成16進位制。 說明
第6章建立函式-----------(在.bashrc檔案中定義函式、在命令列建立函式、在命令列中使用函式)
6.6在命令列中使用函式 指令碼函式可以用於建立比較複雜的操作。指令碼函式不僅可以用作shell指令碼命令,也可以用作命令列介面的命令。一旦在shell中定義了函式,可以從系統的任意目錄使用這個函式。不必擔心PATH環境變數是否包含函式檔案所在目錄。關鍵是
spark三種清理資料的方式:UDF,自定義函式,spark.sql;Python中的zip()與*zip()函式詳解//及python中的*args和**kwargs
(1)UDF的方式清理資料 import sys reload(sys) sys.setdefaultencoding('utf8') import re import json from pyspark.sql import SparkSession
新手Git for Windows 的安裝、配置 及 GitHub中專案下載
一、Git安裝 1. 下載最新版本雙擊執行 2. 安裝過程 在這裡選擇 Use Git from Git Bash only (最安全的選項,表示僅能在git bash裡面使用git命令,