门禁项目结束,Python的学习和使用告一段落。签了一家上市公司,现在转战CRM系统.....
可爱的Python,可爱的Linux,我会时常想你们的,回来看看你们。
Python的自省功能:
python的自省功能强大:自省是指代码可以查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行操作
python中不存在接口
python中不存在“基类”的概念,也没有单根,更没有基本类型,所有的一切都是对象。
python中所有的类,都是抽象类,或者说根本不存在抽象类,类方法可以直接使用,“类”本身在定义的时候就已经实例化,你可以通过输入:某类[回车]看到其内存句柄。这是符合事实的,并且时简约明了的。
Python的转换:
把十六进制的字串转为十进制數字:
>>> print int('ff', 16)
255
把十进制數字转换为以十六进制表示之字串,可调用內置的hex()函数:
>>> print hex(255)
链表转为字符串
t=['a', 'b', 'c']
str(t)
repr(t)
import string
string.join(t)
哈哈,终于解决,相关代码:
import binascii
senddata= binascii.a2b_hex ("eb90eb90eb90aa55aa55")
mysock.send(senddata)
十六进制编码和字符串互相转换
>>> s='/x16/xa1'
>>> s.encode('hex')
'16a1'
>>> t = s.encode('hex')
>>> print t
16a1
>>> print s
>>> type(t)
<type 'str'>
>>> s='01020304'
>>> s=s.decode('hex')
>>> print s
项目中发送的底层数据流中只要含有10即替换为1010,算法实现如下:
#替换有效的10为1010
def x(st):
cnt = 0
while cnt < len(st):
yield st[cnt:cnt+2]
cnt += 2
s='10100010010101'
for p in x(s):
print p
str = ''.join(['1010' if item == '10' else item for item in x(s)])
print str
字符串左补空格和右补空格
>>> slen = "%04d" %ilen
>>> print slen
0008
>>> slen = "%-04d" %ilen
>>> print slen
8
new一个时间
import time
from datetime import datetime
datetime(year,month,day,hour,minute,second)
Tcp/IP协议:
socket利用Tcp协议,接受到的数据为已经去掉tcp包头和包尾的数据
tcp协议可以保证不会丢数据,不会乱序,不会丢包
tcp可以设置超时时间:
#启用KeepAlive选项
self.transport.setTcpKeepAlive(1)
#TCP_KEEPIDLE: 开始首次KeepAlive探测前的TCP空闭时间
self.transport.socket._sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 60)
#TCP_KEEPINTVL:两次KeepAlive探测间的时间间隔
self.transport.socket.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 10)
#TCP_KEEPCNT:判定断开前的KeepAlive探测次数
self.transport.socket.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, 3)
文本准换为十六进制:
#例如有十六进制串:0x690x730x730x69
#十六进制->String类型
HexStr="0x690x730x730x69"
fullstring=''
word=HexStr.split("0x")
for i in word:
if i.strip()!="":
a=int(i,16)
fullstring=fullstring+chr(a)
print fullstring
打印异常信息:
import traceback
print traceback.format_exc()
读写文件:
poem='aabbccddeeff'
f = file('poem.log', 'a')
f.write(poem)
f.close()
获取当前时间
>>> import datetime
>>> print datetime.datetime.now()
构造一个时间
date = datetime(2011,01,03,12,12,12)
字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成。字典的键必须是不可改变的类型,如:字符串,数字,tuple;值可以为任何python数据类型。
1、新建字典
>>> dict1={} #建立一个空字典
>>> type(dict1)
<type 'dict'>
2、增加字典元素:两种方法
>>> dict1['a']=1 #第一种
>>> dict1
{'a': 1}
#第二种:setdefault方法
>>> dict1.setdefault('b',2)
2
>>> dict1
{'a': 1, 'b': 2}
3、删除字典
#删除指定键-值对
>>> dict1
{'a': 1, 'b': 2}
>>> del dict1['a'] #也可以用pop方法,dict1.pop('a')
>>> dict1
{'b': 2}
#清空字典
>>> dict1.clear()
>>> dict1 #字典变为空了
{}
#删除字典对象
>>> del dict1
>>> dict1
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
NameError: name 'dict1' is not defined
4、字典的方法
1)get(key,default=None)
返回键值key对应的值;如果key没有在字典里,则返回default参数的值,默认为None
>>> dict1 #空的字典
{}
>>> dict1.get('a') #键‘a’在dict1中不存在,返回none
>>> dict1.get('d1','no1') #default参数给出值'no1',所以返回'no1'
'no1'
>>> dict1['a']='no1' #插入一个新元素
>>> dict1
{'a': '1111'}
>>> dict1.get('a') #现在键'a'存在,返回其值
'1111'
2)clear
清空字典
3)has_key(key)
如果key出现在dict里则返回True;否则返回False
>>> dict1
{'a': '1111'}
>>> dict1.has_key('b')
False
>>> dict1.has_key('a')
True
4)items
返回dict的(键,值)tuple对的一个列表
>>> dict1
{'a': 'no1', 'b': '2222'}
>>> dict1.items()
[('a', 'no1'), ('b', '2222')]
5)keys 返回dict的键列表
6)values 返回dict的值列表
>>> dict1
{'a': 'no1', 'b': '2222'}
>>> dict1.keys()
['a', 'b']
>>> dict1.values()
['no1', '2222']
7)setdefault(key,default=None)
如果dict中有key,则返回key值,如果没有找到key,则在dict中加上该key,值由default参数给出,默认None
8)update(dict2)
把dict2的元素加入到dict中去,键字重复时会覆盖dict中的键值
>>> dict2
{'c': '3333', 'b': 'no2'}
>>> dict1 #dict2和dict1的键‘b'重复
{'a': 'no1', 'b': '2222'}
>>> dict1.update(dict2) #调用update后,dict1的键'b'值被覆盖了
>>> dict1
{'a': 'no1', 'c': '3333', 'b': 'no2'}
9)popitem
删除任意键-值对,并返回该键-值对,如字典为空,则产生异常
>>> dict1
{'b': 'no2'}
>>> dict1.popitem()
('b', 'no2')
>>> dict1
{}
>>> dict1.popitem()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
10)pop(key,[d])
删除指定键字的键-值对,并返回该键对应的值 #第二个参数不知道怎么用
>>> dict1
{'a': 'no1', 'c': '3333', 'b': 'no2'}
>>> dict1.pop('a')
'no1'
>>> dict1
{'c': '3333', 'b': 'no2'}
11)copy
返回字典的一个浅拷贝
#以下方法目前还不知道怎么用
12)fromkeys
13)iteritems
14)iterkeys
15)itervalues