1 python 杂项
1.1 导入其他目录下头文件
project
--> dir1
--> dir2
--> demo1.py
--dir3
--> demo2.py
# demo2.py 引用 demo1.py 定义的接口
# 子目录使用.进行连接
from dir1.dir2.demo1 import *
# 如果有pyQt5 可以参考 pyqt5 ui目录下调用文档关系.
1.2 数组操作
array[] # 数组定义
array.append(temp_rpu) # 数组赋值
array.append(temp_pl)
print("array[0]:", array[0]) #数组访问
1.3 字符串取字符操作
print str[:] #截取字符串的全部字符
print str[6:] #截取第七个字符到结尾
print str[:-3] #截取从头开始到倒数第三个字符之前
print str[2] #截取第三个字符
print str[-1] #截取倒数第一个字符
print str[::-1] #创造一个与原字符串顺序相反的字符串
print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
print str[-3:] #截取倒数第三位到结尾
print str[:-5:-3] #逆序截取
1.4 累加求和校验
# cmd_head = 0xAB or 0xBA
# pack_id: 0 ~ 65535 , pkg_len: cmd_type + ... + check_sum
# cmd_type=0x03
# para_type = 0x0
# para_data = '0102030405' 如果para_data为空 ,para_data=''
def pack_packet(cmd_head, pack_id, pkg_len, cmd_type, para_type, para_data):
para_data_len=len(para_data)
sum=cmd_type+para_type+pkg_len
for i in range(0, para_data_len):
if( i%2 == 0):
data=int(para_data[i:(i+2)], 16)
sum += data
sum &= 0xFFFF
packet =int2bytes(cmd_head,1) + int2bytes(pack_id, 2) + int2bytes(pkg_len, 2) + int2bytes(cmd_type, 1) + int2bytes(para_type,1) +bytes.fromhex(para_data)+ int2bytes(sum, 2)
return packet
# 收到Lidar发送的反馈包进行解包校验,判断是否正确.
# 反馈值:协议帧是否正确,应答错误码,0标识OK, 非0标识相应失败.
def unpack_ack_packet(buffer):
print("unpack_ack_packet ")
# b'\xAB\xAC+len(2) + ack_errno(1) + ack_data(n) + check_sum(2)'
length=len(buffer)
cmd_head = bytes2int(buffer[0:1])
cmd_ack = bytes2int(buffer[1:2])
data_len= bytes2int(buffer[2:4])
ack_errno=bytes2int(buffer[4:5]) # ack_errno
# print("buffer:", buffer[-2:], buffer[-4:-3], buffer[-6:-5])
# print("", cmd_head, cmd_ack, data_len, ack_errno)
ack_check=bytes2int(buffer[-2:])
# print("ack_check:", ack_check)
sum = data_len
for i in range(2, data_len-1):
if( i%2 == 0):
sum +=bytes2int(buffer[i, i+1])
sum &= 0xFFFF
print("ack_check:", ack_check, " cal_sum:", sum)
return (ack_check == sum), ack_errno