2013-08-26 54 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() 
相關問題