2017-10-13 193 views
1

目前,我将数据从UDP客户端,看起来像这样写着:蟒蛇正则表达式读取原始UDP数据转换成3D点

X,-3.6958579946845745e+001,Y,-1.6998436983768425e+001,Z,-8.2843220475401704e+000 
X,-3.6958578049325865e+001,Y,-1.6998421509164846e+001,Z,-8.2843157671767944e+000 
X,-3.6958558150477288e+001,Y,-1.6998528495040631e+001,Z,-8.2843652460239454e+000 

我已经设置了读取服务器中的原始数据,然后我需要将数据解析为3个单独的值。

import socket 

UDP_IP_ADDRESS = '' 
UDP_PORT_NO = 5005 

serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
serverSock.bind((UDP_IP_ADDRESS, UDP_PORT_NO)) 

while True: 
    data, addr = serverSock.recvfrom(4096) 
    x,y,z = parse_data(raw_data) #parse into 3 distinct values 

我卡在实际界定parse_data()功能的一部分。我只熟悉逗号分隔或空格分隔行的简单解析。我尝试使用txt2re,但无法理解我需要创建的常规表达式。

定义的parse_data()函数使用regular expressions也似乎是合适的,因为它能够提供低延迟。一个快速的班轮将是非常有益的。

+0

你需要获取完整的数字作为一个字符串值(例如'-3.6958579946845745e + 001'),或者你需要捕获的幅值分开(例如'xValue = -3.6958579946845745'和'xMagnitude = 1')? –

回答

3

既然你问了一个班轮:

x, y, z = map(float, raw_data.split(',')[1::2])