2013-08-26 22 views
0

我有这样的计划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 

任何人都可以帮我解决这个问题,,, 谢谢。

+1

请修复代码中的缩进级别 – inspectorG4dget

+1

为什么要编写'myString [1]'而不仅仅是'myString'? – wflynny

+0

'.read(5)'可以返回* 5个字符。它可能返回的数据少于此数,并且需要考虑这一点。 –

回答

0

数据接收= 89435,我可以如何利用字符串数据,例如,如果我想利用字符串数据[2] = 9和写入文件...

如果字符串89435那么[2]上的字符不是9,它是4。字符串的第一个字符是[0],第二个字符是[1],依此类推 - 在Python中编码时,从0开始计数索引。

另外:

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

除非我失去了一些东西,重新分配rcvvalue这里已经没有效用。你不会用这些括号改变它的类型,也没有理由你必须用三行来读取这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() 

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

+0

Python中没有** cast **的概念,因为给定对象的类型永不改变:_“像它的标识一样,对象的类型也是不可改变的。”_(http://docs.python。org/3/reference/datamodel.html#objects-values-and-types) – eyquem

+0

是的,我猜“转换”或“解码”应该是更合适的术语。 – Air

+0

非常感谢你,它的工作原理。你能再帮助我吗?如果我放在那里,有可能吗?例如数据接收是a1234。如果rcv [0] ==打印“hai”,则打印“hello”。 –

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() 
相关问题