我从相机收到一个字符串,其中包含' detailinfo,X,Y,angle,而不是重要的'。 字符串如下所示: DET4 1 X:34.82 Y:70.28 VINKEL:244.33 LUTANDE:0 。 VINKEL =角。 现在我需要从中取出X,Y,角度数据,将其发送给机器人。 我完成它的方式如下,
CamX=received[9:15]
CamY=received[17:23]
Rotation=received[30:36]
问题在于"信息"在X,Y,角度,可以是3位数,或2位数。所以现在如果我得到一个3位数的X值,Y值将是假的。有没有其他方法来定位和读取X,Y,角度的值?
整个计划:
#RECEIVING DATA FROM CAMERA#
import socket
import time
host= "192.168.1.10"
port= 3000
print("start");
S = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
S.connect((host,port))
received = str(S.recv(1024), "utf-8")
print(received);
S.close()
#CONVERTING DATA TO X,Y COORDINATES#
CamX=received[9:15]
CamY=received[17:23]
CamX=float(CamX)/100
CamY=float(CamY)/100
CamPos= '('+str(CamX) +','+str(CamY)+',0.2,0.01,3.14,0.01)'
print('X:', CamX)
print('Y:', CamY)
print(CamPos)
#SENDING DATA TO ROBOT#
host2="192.168.1.5"
port2= 30000
print("start");
SR = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
SR.bind((host2,port2))
SR.listen(5)
conn, addr=SR.accept()
print("Connected by ",addr)
conn.send(CamPos.encode('utf-8'))
print('Coordinates sent to robot')
答案 0 :(得分:1)
以下内容不是非常强大。无论如何,试试:
received = 'DET4 1 X:34.82 Y:70.28 VINKEL:244.33 LUTANDE:0'
lst = received.split()
print(lst)
x = float(lst[2].split(':')[1])
y = float(lst[3].split(':')[1])
print('x:', x, 'y:', y)
第一个拆分使用默认参数 - 空格,制表符或换行符。
其他代码假定received
具有相同的形式,因此信息的位置在列表中是相同的。冒号的第二个拆分分隔X或Y标识符。后面的[1]
表示您需要第二部分 - 数字。 float()
将其转换为实数。
答案 1 :(得分:1)
正如@rr所说,正则表达式可能更可靠。你应该开始here。这样的东西会起作用:
import re
input = 'DET4 1 X:34.82 Y:70.28 VINKEL:244.33 LUTANDE:0.'
try:
cam_x = re.search(r'\sX:(?P<cam_x>\d+\.\d+)\s', input).group('cam_x')
cam_y = re.search(r'\sY:(?P<cam_y>\d+\.\d+)\s', input).group('cam_y')
rotation = re.search(r'\sVINKEL:(?P<rotation>\d+\.\d+)\s', input).group('rotation')
print cam_x, cam_y, rotation
except AttributeError:
print 'Unexpected formatting of the input.'
基本上这些正则表达式匹配:
答案 2 :(得分:0)
试试这个:
values = [(a[0],a[1]) for a in [ x.split(':') for x in text[7:].split()] if a[0] == 'X' or [0] == 'Y' ]
print values
答案 3 :(得分:0)
感谢您的回答@SébastienDeprez,@ andmart,@ pepr
我对编码和python完全不熟悉,但我认为我已经设法自己解决了这个问题,也许不像你的代码那么花哨,但它应该做正确的工作吗?
r='DET4 1 X:134.812 Y:170.028 VINKEL:124.033 LUTANDE:0'
r=r.replace(r[0:9],'')
r=r.replace('Y:','')
r=r.replace('VINKEL:','')
r=r.replace('LUTANDE:0','')
r=r.replace(' ',',')
r=r.split(',')
camX=r[0]
camY=r[1]
camV=r[2]
print('R:',r)
print('X:',camX)
print('Y:',camY)
print('Vinkel:',camV)