ゲームでスイッチを切り替えてランプを制御するために書かれているように、ファイルを読み取るためにこのコードを書きました。このスイッチにより、文字列がファイルに追加されます。プログラムは動作しますが、遅いです。読み取り元のファイルには、15,000 行を超える反復処理が含まれているため、1 秒おきにしか更新できません。それをスピードアップする方法はありますか?ありがとう!
import serial
s = serial.Serial(port = "COM3", baudrate = 9600)
def file_len():
try:
with open("file", "r") as f:
for r, l in enumerate(f):
pass
return r + 1
except:
pass
def toggle(data, value):
if(data.find("Clap Off!") == 0 and value == True):
print("Off")
s.write("RelayOff")
elif(data.find("Clap On!") == 0 and value == False):
print("On")
s.write("RelayOn")
truth = False
while True:
try:
file = open("file", "r")
for i, line in enumerate(file):
if i == (file_len() - 2):
toggle(data = file.readline(), value = truth)
truth = not truth
file.close()
except:
pass
編集:これを使用して while file_len 関数をバイパスしようとしました:
while True:
try:
file = open("file", "r")
file.seek(-1, 2)
#print(file.readline())
toggle(data = file.readline(), value = truth)
file.close()
truth = not truth
except:
pass
しかし、「io.UnsupportedOperation: can't do nonzero end-relative seeks」というエラーが発生します。これは seek() が機能する方法ですか、それともファイルの最後から逆方向にシークする方法はありますか?