使用Python进行二进制文件(Labview .DAT文件)转换

时间:2014-07-03 21:06:38

标签: python numpy binary labview file-conversion

我在实验室工作,我们使用自定义Labview VI获取电生理记录(跨4个记录通道),将获取的数据保存为.DAT(二进制)文件。然后可以在更多的Labview VI中继续分析这些文件,但是我想用Python分析我的所有录音。首先,我需要遍历所有文件并将它们转换为二进制文件!

我已经尝试过numpy.fromfile(filename),但我拿出的数字对我没有意义:

  

阵列([3.44316221e-282,1.58456331e + 029,1.73060724e-077,...,           4.15038967e + 262,-1.56447362e-090,1.80454329e + 070])

为了进一步尝试,我查找.DAT标头格式,以了解如何获取字节并翻译它们 - 数据保存的字节数等: http://zone.ni.com/reference/en-XX/help/370859J-01/header/header/headerallghd_allgemein/

但我无法解决该怎么做。当我在终端输入“head filename”时,下面是我看到的。

  

e.g。 >> 2014_04_10c1slice2_rest.DAT

     

DTL?   0 ???? @@ ????                空数组   PF?c???????????????????????????????????????????????????????????????????????   22 N T&X ??? d?               ?紫外线?TGD?〜我?                            ?19 NŤX>有N 10                                         ????吨X>有N 10                                                      ????吨?޾?? d?                                                                  ????吨?X ??? d?                                                                               ????吨?X?〜I 12            ???? TGD> N 10                         30 N 2 TGD ??? d?                                      22 N T&X ??? d?                                                   ????吨???? DY   ?19 NŤX>有N 10               30 N 2吨???? DY   ?KN $?吨????? DY   20 N吨??>有N 10               ?19 N TGD> N 10                            ????吨?X?〜I 12                                         ???? TGD> N 10                                                      ?19 N TGD> N 10                                                                   30 N 2 TGD ??? DY   ????吨?X ??? d?               ???? T 380〜I 12                            30 N 2 TGD ??? DY   30 N 2 TGD ??? d?               22 N T&޿〜I 12                           32 N 2吨?X ??? DY   ?19 N TF> N 10              32 N 2吨?X?%Y

对于下一步该做什么的任何帮助或建议都将非常感激。

感谢。

P.S。有一个旧的(损坏的)matlab文件似乎是为了转换这些文件。我认为这可能会有所帮助,但是花了几天时间试图理解它我仍然被卡住了。 http://www.mathworks.co.uk/matlabcentral/fileexchange/27195-load-labview-binary-data

2 个答案:

答案 0 :(得分:1)

基于this link,看起来以下应该可以解决这个问题:

binaryFile = open('Measurement_4.bin', mode='rb')
(data.offset,) = struct.unpack('>d', binaryFile.read(8))

请注意,对于二进制文件,mode设置为'rb'

使用numpy,您可以直接执行此操作

data = numpy.fromfile('Measurement_4.bin', dtype='>d')

请注意,如果您只是使用Python作为中间人并希望使用数据返回LabVIEW,则应使用函数Read from Binary file.vi使用本机LabVIEW读取二进制文件。

答案 1 :(得分:1)

DAT是一个非常通用的后缀,不一定指向特定格式。如果我理解正确,该帮助部分适用于DIAdem,这可能与您从LV保存数据的方式完全无关。

你想要的是这个帮助部分,它告诉你LV如何平展要存储在磁盘上的数据 - http://zone.ni.com/reference/en-XX/help/371361J-01/lvconcepts/flattened_data/

您需要查看LV代码,以确切了解您要保存的数据类型以及如何配置写入文件功能(字节顺序,大小前置等),然后使用该文档将其转换为实际的表现形式。