如何从变量中获取数据字符串并写入文件

时间:2013-08-26 20:30:52

标签: python

我有像这样的程序python脚本,

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    value = (rcv)
    myString = str(value)
    b = open("/var/www/lampu1.txt","a")
    b.write(myString[1])
    b.close()

该程序可以从串口接收数据,所有数据都将保存到文件“lampu1.txt”中。 我只想从收到的数据中取出1个字符串数据并写入文件。 例如: 数据接收= 89435, 如何获取字符串数据,如果我想取字符串数据[2] = 9并写入文件“lampu1.txt”。 因为当我执行此程序时发生错误。 这个错误发生在终端上。

Traceback (most recent call last):
File "terima.py", line 11, in <module>
b.write(myString[1])
IndexError: string index out of range
任何人都可以帮我解决这个问题,,, 谢谢。

2 个答案:

答案 0 :(得分:0)

  

data receive = 89435,我如何获取字符串数据,如果我想取字符串数据[2] = 9并写入文件......

如果字符串为89435,则[2]处的字符不是9,而是4。字符串的第一个字符位于[0],第二个字符位于[1],依此类推 - 在Python中编码时,从0开始计算索引。

此外:

rcv = port.read(5)
value = (rcv)
myString = str(value)

除非我遗漏了某些内容,否则rcv重新分配给value这里没有效用。你没有用这些括号改变它的类型,并且没有理由你必须使用三行来将这5个字节读作str;只需myString = str(port.read(5))

事实上,你甚至可能不需要str()。取决于您对串口的期望信息 - 整数? ASCII字符?只有字母,还是空白字符?等等。

试试这个,看看它是否符合你的要求:

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    b = open("/var/www/lampu1.txt","a")
    try:
        b.write(rcv[0])
    except IndexError:
        pass
    b.close()

在超时之前从端口读取0个字节时,您可以将pass替换为您要使用的任何逻辑。您可能还应该将b.open()b.close()移到while块之外,除非您有理由打开和关闭并永久打开和关闭文件,但没有一些逻辑可以退出循环它没有意义,所以我会让你自己处理。

答案 1 :(得分:0)

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    value = (rcv)
    myString = str(value)
    b = open("/var/www/lampu1.txt","a")
    #I want to output first character (0th entry)
    if (len(b) > 0):
        b.write(myString[0])
    else:
        b.write("Error condition")
    b.close()