0

CSV として出力したい MAT ファイルがいくつかあります。あきらめた場合は、.txt として保存できますが、CSV でこれを行う方法を知りたいです。

私の問題は、チャネルごとにタイムスタンプが異なることです。0.5hz 程度の低いチャンネルもあれば、約 10hz のチャンネルもあると思います。しかし、それらは正確に並んでいないようです。誰かがゼロ次ホールドを提案しましたが (それを実行する方法がわかりません)、このデータを「純粋な」ものとしてリリースしているので、タイムスタンプを調整したくありません。

channels = []

for key in matfile.keys():
    if key.startswith('CAN'):
        channels.append(str(key) + '_time')
        channels.append(key)

output = {}

for channel in channels:
    if channel.endswith('_time'):
        channel_time = channel[0:-5]       
        output[channel] = matfile[channel_time].item()[6] 
    else:
        output[channel] = matfile[channel].item()[7].item()[0]

with open(path_plus_title, 'wb') as outfile:
   writer = csv.writer(outfile)
   writer.writerow(channels)
   writer.writerows(zip(*(output[k] for k in channels)))    

これにより、チャンネルのタイムスタンプの後にチャンネルが続く順序で、必要なチャンネルのみが得られます...しかし、データの最短列の終わりに達すると、書き込みが停止します。

短い列をスペースやゼロなどで埋めて、データをまっすぐに保ち、それがデータの終わりであることを明確にしたいと思います。私が見逃した列単位の方法はありますか?

4

1 に答える 1

1

itertools.izip_longest()を使用してみてください。早期に終了する理由は、最初の反復子が終了すると zip が終了するためですが、izip_longest は、必要に応じて、短い反復子をデフォルト値でバッファーします。

于 2013-11-04T20:32:28.010 に答える