私は、とりわけマイクロコントローラからのデータを受け取ったCプログラムを置き換えるPythonプログラムを書いています。これは、単純なソケットとread関数を使用してC言語で行われました。私のPythonプログラムでは、マイクロコントローラから一連のデータを読み取ることができますが、読み込み可能な形式にすることはできません。私は、この文字列を捕獲し、番号のリストだけにそれを変換しようとはるかに小さいプログラムを書かれている:ここでPythonでバイナリデータを読む(Cコードを置き換える)
import array
import thread
import socket
import time
import math
import numpy as np
import struct
data = open("rawfile.txt", 'r')
conv = open("conv.bin", 'wb')
pack = open("pack.txt", 'w')
# This line reads in the data string from the file
rawdata = data.read()
length = len(rawdata)
unpack = np.zeros(length, dtype=np.int64)
inter = np.int64
size = 4
m=0
for n in range(0,length-size):
inter = struct.unpack_from('h',rawdata,n)
unpack[m] = inter[0]
m=m+1
n=n+4
conv.write(unpack)
for j in range(0,len(unpack)):
#print unpack[j]
stringtowrite = str(unpack[j])
pack.write(stringtowrite)
pack.write(',')
#conv.write(dat2)
print "Done"
は(MATLABでプロットされている)、このプログラムが生成するデータであり、どのようなデータが見えるはずです以下のように:(クリーナーパルスは、それがどのように見えるかである)
すべてのヘルプは大幅に私は数週間のためにこれで苦労してきた、高く評価されるだろう。私は生データファイルをアップロードすることができますが、私はそれを非常に大きなものとしてどのように行うのかよく分かりませんでした。
要約すると、私の質問は、なぜプログラムが最初のイメージ用のデータを生成し、2番目のデータ用のデータを生成しないのかということであり、私が読み込んでデータを変換していることは明らかに間違っています。
ありがとうございます!
EDIT/UPDATE:
dt = np.dtype('int16')
unpack = np.zeros(302000, dtype=dt)
unpack = np.fromfile(data, dtype=dt)
conv.write(unpack)
を、データが良く見える:以下偉大な答えに
おかげで、私は今、これを使用しています!最初のイメージはdtype( 'int16')で、2番目のイメージはdtype( 'int32')です。私が読んでいるデータは、numpy dtypeに使用するフォーマット文字列を変更すると、実数/虚数が交互になっていることが分かりました。私が知っている限り、これを説明したCコードには一歩もありませんでした。
最終更新日:
誰の混乱を避けるために、上述した第2の2枚の画像が正しくデータを読んでいる、それは彼らが右に見ていないさせる実際のデータでは問題でした。
あなたは、cタグを削除する必要があります。あなたの質問にはcコードがないからです。 – Stargateur
それ以外の場合は、Cの古いソースコードをバイナリの参照用として提供してください。 –