【问题标题】:Formatting a return value from a serial device格式化来自串行设备的返回值
【发布时间】:2021-05-17 13:42:05
【问题描述】:

我正在通过串行方式从设备读取值,返回值的格式为:

[理论位置mm,编码器位置mm],例如b'\r#-0.001504,-0.001516\n'

我想格式化这个返回值并将第二个值保存到一个数组中。有谁知道我该怎么做?任何建议都非常感谢。

谢谢。

新编辑:这是我的代码和输出。此时我只需要从这个字符串中提取浮点值。

    ser.write(b'1POS?\r') #command to query position
    pos = ser.readline() #read the position
    pos_str = str(pos)
    pos_splt = pos_str.split(",") 
    enc_pos = pos_splt[1]
    print(enc_pos)

输出:“-0.028970\n'”

【问题讨论】:

  • 是的,我有个主意。但首先,您尝试过什么?
  • 你可以使用.split("separator")来分割你的字符串
  • stripsplitfloat 的组合似乎可以完成大部分工作。
  • 你应该展示你尝试过的代码以获得一些帮助。
  • 我注意到你注释掉了print(pos)。如果从串口读取后恢复该行会怎样?

标签: python pyserial


【解决方案1】:

好的,抱歉,我刚刚意识到您的: error "a bytes-like object is required, not 'str'" 意思。

这是因为您要拆分的是字节数组,虽然它有一个split() 方法,但它需要一个字节数组作为参数。

现在试试这个:

pos = b'\r#-0.001504,-0.001516\n'   # Sample data from serial port

pos_splt = pos.strip().split(b",")  # the param b"," is the bytes version of ","
enc_pos = pos_splt[1]
print(float(enc_pos))

输出

-0.001516

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多