Menu
Woocommerce Menu

Relay控制例子,Python基础数据存储学习笔记

0 Comment

这几天收拾的时候发现了Phidget,这还是上一个案子客户给的。型号是1014_2,记得是当时拿来做压力测试用的。
过太久都忘了怎么用了,所以再拾遗一下

因为重装Ubuntu
16.04的系统,所以就从头装一遍phidget在Linux平台上的运行环境。
可参考Phidget官网,这里只是大体说一下。

   
在Linux的多目录命令提示符中工作是一种痛苦的事情,但以下这些利用cd和pushd切换目录的技巧有助于你节省时间和精力

在Linux命令提示中,用cd命令来改变当前目录。这是cd命令的一些基本用法:
改变你的根路径,键入cd,按回车键。
进入一个子目录,键入cd,空格,然后是子路径名(例如:cd
Documents),再按回车键。
进入当前目录的上一级目录,键入cd,空格,两个点,然后按回车键。
进入一个特定的目录,键入cd,空格,路径名(例如 cd
/usr/local/lib),再按回车键。
为了确定你所在的目录,你可以键入pwd,按回车键,你将看到你所在的当前目录名称。
用pushd实现在不同目录间切换。
在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上。如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径名,这难免让人有些难以忍受。但你可以用以下的一个或两个步骤来避免所有多余的输入:用命令行解释器中的历史记录,或者用命令行函数pushd。
用命令行解释器中的历史记录的好处是只需按很少的键。在命令行中用向上的箭头来查找你用过的命令,直到你找到,然后按回车键。如果你所切换的两个目录在整个驱动器的子目录结构中很接近,那用解释器中的历史记录可能是你最好的选择。
然而,如果你在两个截然不同的路径间转换的话,你可能很希望利用pushd这个函数,你可以用它创建一个目录堆栈(在内存中的一个列表)。
注释:缺省情况下,pushd函数可能不包括在你的Linux中;但它包涵在Red
Hat和用Red
Hat驱动的系统中。如果你的系统中没有pushd函数,你可以在ibiblio.org网站上下载相关的函数工具。
这里说一下怎么用pushd。假设你现在工作在/usr/share/fonts目录下。你需要对/usr/share/fonts做一些改动,你将频繁的在两个目录间切换。开始在一个目录下,用pushd函数切换到另一个目录。在我们的例子中,开始在/usr/share/fonts下,你键入
pushd/opt/wonderword/fonts,然后按回车键。现在,你将在下一行看到堆栈中的内容:/opt/wonderword/fonts
/usr/share/fonts
正如你所看到的,当你键入pushd和一个路径名时,将自动产生一个堆栈,内容是你键入的目录名和你当前工作的目录名。在我们的例子中,你所键入的路径(/opt/wonderword/fonts)在堆栈的顶部。
快速返回上一级目录,你可以直接键入pushd,如果不跟路径名,你将返回到堆栈中前一个目录的上一层目录。
如果你需要从堆栈中删除一个目录,键入popd,然后是目录名称,再按回车键。想查看堆栈中目录列表,键入dirs,然后按回车键。popd和dirs命令也是常用函数中的一部分。
图片 1

pickle是标准库中的一个模块,在Python
2中还有一个cpickle,两者的区别就是后者更快。所以,下面操作中,不管是用
import pickle ,还是用 import cpickle as pickle ,在功能上都是一样的。

Linux环境的搭建

而在Python 3中,你只需要 import pickle 即可,因为它已经在Python
3中具备了Python 2中的cpickle同样的性能。

安装libusb的开发库

pickle.dump(obj,file[,protocol])

sudo apt-get install libusb-1.0-0-dev

obj:序列化对象,在上面的例子中是一个列表,它是基本类型,也可以序列化自己定义的对象。
file:要写入的文件。可以更广泛地可以理解为为拥有 write()
方法的对象,并且能接受字符串为为参数,所以,它还可以是一个 StringIO
对象,或者其它自定义满足条件的对象。
protocol:可选项。默认为False(或者说0),是以ASCII格式保存对象;如果设置为1或者True,则以压缩的二进制格式保存对象。
序列化对象

安装Phidget库

>>> import pickle
>>> d = {}
>>> integers = range(9999)
>>> d[“i”] = integers       
#下面将这个字典类型的对象存入文件

点击下载路径下载Phidget库。

>>> f = open(“22902.dat”, “wb”)
>>> pickle.dump(d, f)           #文件中以ascii格式保存数据
>>> f.close()

解压后,依次执行:

>>> f = open(“22903.dat”, “wb”)
>>> pickle.dump(d, f, True)    
#文件中以二进制格式保存数据,文件较小,推荐方式
>>> f.close()

./configure
make
sudo make install

>>> import os
>>> s1 = os.stat(“22902.dat”).st_size   
#得到两个文件的大小
>>> s2 = os.stat(“22903.dat”).st_size

检查Phidget库的安装

>>> print “%d, %d, %.2f%%” % (s1, s2, (s2+0.0)/s1*100)   
#Python 3: print(“{0:d}, {1:d}, {2:.2f}”.format (s1, s2,
(s2+0.0)/s1*100))
68903, 29774, 43.21%
反序列化对象

Software:

将数据保存入文件,还有另外一个目标,就是要读出来,也称之为反序列化。

下载官方提供的示例

    >>> integers = pickle.load(open(“22901.dat”, “rb”))
    >>> print integers    #Python 3: print(integers)
    [1, 2, 3, 4, 5]

解压后编译HelloWorld.c

再看看以二进制存入的那个文件:

gcc HelloWorld.c -o HelloWorld -lphidget21

    >>> f = open(“22903.dat”, “rb”)
    >>> d = pickle.load(f)
    >>> print d
    {‘i’: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ….  
#省略后面的数字}
    >>> f.close()
读取自定义对象

运行HelloWorld

    >>> import cPickle as pickle        #这是Python
2的引入方式,如果是Python 3,直接使用import pickle
    >>> import StringIO                
#标准库中的一个模块,跟file功能类似,只不过是在内存中操作“文件”
   
    >>> class Book(object):             #自定义一种类型
    …     def __init__(self,name):
    …         self.name = name
    …     def my_book(self):
    …         print “my book is: “, self.name        #Python 3:
print(“my book is: “, self.name)
    …
   
# 存数据

sudo
./HelloWorld
Opening…
Phidget Simple Playground (plug and unplug devices)
Press Enter to end anytime…
Hello Device Phidget InterfaceKit 0/0/4, Serial Number: 381507
Goodbye Device Phidget InterfaceKit 0/0/4, Serial Number: 381507

>>> file = StringIO.StringIO()
>>> pickle.dump(pybook, file, 1)
   
# 取数据

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图