私はPythonの初心者で、2つのIntel hexファイル(1つはアプリケーションコード用、もう1つはブートローダー用)を取得し、最初のファイルからEOFレコードを削除し、削除されたファイルに2番目のファイルを追加するスクリプトを作成しようとしています。最初のバージョンを作成し、新しいファイルとして保存します。私はすべてが機能しているが、それからもっと凝ったものにすることに決めた。最初のファイルの最後の行が本当にIntelEOFレコード形式と一致することを確認したい。ただし、この条件付きの構文を正しく取得できないようです。
appFile = open("MyAppFile.hex", "r")
lines = appFile.readlines()
appFile.close()
appStrip = open("MyAppFile and BootFile.hex",'w')
if appStrip.readline[:] == ":00000001FF": #Python complains about "builtin_function_or_method" not subscriptable here
appStrip.writelines([item for item in lines[:-1]])
appStrip.close()
else:
print("No EOF record in last line. File may be corrupted.")
appFile = open("MyAppFile and BootFile", "r")
appObcode = appFile.read()
appFile.close()
bootFile = open("MyBootFile", "r")
bootObcode = bootFile.read()
bootFile.close()
comboData = appObcode + bootObcode
comboFile = open("MyAppFile and BootFile", "w")
comboFile.write(comboData)
comboFile.close()
これのよりクリーンまたはより安全なバージョンに関する他の提案も歓迎します。
更新:最後の行を印刷する行を追加しました。期待どおりの出力が得られますが、それでも毎回比較に失敗します。現在の完全なプログラムは次のとおりです。
appFile = open("C:/LightLock/Master/Project/Debug/Exe/Light Lock.hex")
appLines = appFile.readlines()
appFile = open("MyAppFile.hex").read()
EOF = appLines[len(appLines)-1]
print(appLines[len(appLines)-1])
if not EOF == (":00000001FF"):
print("No EOF record in last line of file. File may be corrupted.")
else:
with open("MyAppFile Plus Boot", "a") as appStrip:
appStrip.writelines([item for item in appLines[:-1]])
with open("MyAppFile Plus Boot.hex", "r") as appFile:
appObcode = appFile.read()
with open("MyBootFile.hex", "r") as bootFile:
bootObcode = bootFile.read()
comboData = appObcode + bootObcode
with open("MyAppFile Plus Boot.hex", "w") as comboFile:
comboFile.write(comboData)
UPDATE2:次のようにキャリッジリターンとラインフィードを含めるようにチェックを変更しようとしました。
EOF = appLines[len(appLines)-1]
print(EOF)
if EOF != (":00000001FF","\r","\n"):
print("No EOF record in last line of file. File may be corrupted.")
まだ運がない。