我需要导入一个txt文件作为特定函数的列表

时间:2016-02-17 21:29:07

标签: python raspberry-pi

我正在尝试保存并加载传感器的校准数据。我能够读取校准数据并将其保存到文本文件中。查看文本文件时,在一组方括号中有22个由逗号分隔的数字。

我需要以set_calibration函数读取它的方式导入该文本文件。

这是设定的校准功能。

def set_calibration(self, data):
    """Set the sensor's calibration data using a list of 22 bytes that
    represent the sensor offsets and calibration data.  This data should be
    a value that was previously retrieved with get_calibration (and then
    perhaps persisted to disk or other location until needed again).
    """
    # Check that 22 bytes were passed in with calibration data.
    if data is None or len(data) != 22:
        raise ValueError('Expected a list of 22 bytes for calibration data.')
    # Switch to configuration mode, as mentioned in section 3.10.4 of datasheet.
    self._config_mode()
    # Set the 22 bytes of calibration data.
    self._write_bytes(ACCEL_OFFSET_X_LSB_ADDR, data)
    # Go back to normal operation mode.
    self._operation_mode()

问题是,这是我第一次使用python,而且编码经验非常少。我试过这个:

calfile=open("calibrate.txt","r")
caldata=calfile.readlines()
calfile.close()

之后,caldata将打印为" [' [242,255,0,0,27,0,65,2,139,3,174,255,255,255,255,255] ,0,0,232,3,102,3']",但是set_calibration函数返回"期望的校准数据的22字节列表。"错误。当以

运行时
bno.set_calibration(caldata)

我不确定这会有多大帮助,但传感器是Adafruit BNO055,而我正在使用Raspberry Pi运行它。我有一种强烈的感觉,我滥用和/或滥用阅读功能,但是,就像我说的,我对此很新。

2 个答案:

答案 0 :(得分:5)

calfile.readlines()不是您需要在这里使用的内容。如果您的数字全部位于文件的不同行,没有逗号或方括号,那将是这样的:

23
51
32

因为你的数字已经是列表式的格式(即用逗号和方括号),我们需要将它转换为真实的列表而不是字符串表示形式。为此,请使用以下代码在calfile=open...calfile.close()之间替换您的代码:

caldata=[int(x.strip()) for x in calfile.read()[1:-1].split(",")]

这是一个列表解析,它将文件的内容转换为实际的Python列表。

答案 1 :(得分:0)

您遇到此问题,因为您的caldata中的值是一个字符串,所以长度不是22。