我有像这样的程序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
任何人都可以帮我解决这个问题,,,
谢谢。
答案 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()