前提・実現したいこと
特定のパケットフォーマット(ヘッダー/データ/フッター)で繰り返し出力されてるものが1つのバイナリファイルに格納されているのですが、ヘッダーとフッター部分を削除したファイルを出力したいです。
発生している問題・エラーメッセージ
処理時間が長いので短縮したいです。現状491,520,000 Bytesのファイルで10分程度かかります。
該当のソースコード
python
1import os 2 3header_size = 64 4data_size = 256 5footer_size = 4 6packet_size = 324 7i = 0 8 9filename = 'samplebinary' 10 11f = open(filename, 'rb') 12contentLength = os.path.getsize(filename) 13targetLength = contentLength // packet_size 14while i < targetLength: 15 f.seek(header_size) 16 data = f.read(data_size) 17 saveFile = filename + '_output' 18 with open(saveFile, 'ab') as saveFile: 19 saveFile.write(data) 20 f.seek(data_size + footer_size) 21 i = i + 1 22
試したこと
取り出したいデータ部分がヘッダーとフッターの間にあり、seekでヘッダー部分をスキップ→データ部分を取り出す→データ+フッター部分をスキップして次のパケットへ移動という方法しか思いつきませんでした。
補足情報(FW/ツールのバージョンなど)
ファイルの最後はパケットの途中で終わることもあるので、それについては捨ててOKです。
回答2件
あなたの回答
tips
プレビュー