我有一些MAT文件,我想输出为CSV。如果我放弃,我可以将它们保存为.txt,但我真的很想知道如何在CSV中执行此操作。
我的问题是我为不同的频道设置了不同的时间戳。我相信我有一些低至.5hz的通道和一些大约10赫兹的通道。但是,它们似乎并不完全相符。有人建议零顺序保持(我不明白如何执行),但由于我将这些数据发布为“未掺杂”,我真的不想调整时间戳。
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)))
这只给了我想要的频道,按照频道时间标记的顺序跟着频道...但它在到达最短数据列的末尾后停止写字。
我想用空格或零或任何东西填充较短的列以保持数据的直线,并清楚地表明数据结束的位置。是否可能采用以列为单位的方法来实现,我错过了?
答案 0 :(得分:1)
尝试使用itertools.izip_longest()。它早期结束的原因是zip在第一个迭代器结束时结束,但是izip_longest使用默认值缓冲较短的迭代器,就像你想要的那样。