您的位置:首页 > 编程语言 > Python开发

go 语言调用 python 把.dat格式数据转换为.mat

2018-03-23 13:47 651 查看
1、安装numpy 和scipy模块

2、由于没有找到Go语言直接把.dat转换为.mat格式的方法,采用Go语言调用python转换。利用os/exec包中的Command方法调用python,后面三个是参数,存放需要转换数据的路径及转换格式。

cmd := exec.Command("python", "getData.py", fileStrings, filesPath, dataConvert)
_, err := cmd.CombinedOutput()
if err != nil {
log.Error("python data convert Fail", err)
this.Output = "Data Convert mat Fail"
}


getData.py python转换数据脚本如下:

数据本身是十六进制字符串,需要转换数据格式,例如:ad22f329,前四位作为复数的实部,后四位作为复数的虚部,考虑数据的正负,python十六进制字符串转换数字(考虑正负)的方法,可以通过struct中的unpack函数。

# -*- coding: utf-8 -*-
#coding=utf-8

import numpy as np
from scipy import io
import os,sys
import binascii
from struct import *

def dat2mat(datFile,filePath,dataConvert):
flist = datFile.split(";")
datalist2 = []
for f in flist:
if f == "":
continue
file1 = file(f,'r')
datalist = []
i = 0
while True:
line = file1.readline()
if dataConvert == "1" and i == 0:#格式转换1  去掉无效首行
i = i+1
continue
if not line:
break
a = line[0:4]
b = line[4:8]
c = int(a,16)
d = int(b,16)
e=unpack('h', pack('H', c))[0]
f=unpack('h', pack('H', d))[0]
comData = complex(e,f)
datalist.append(comData)
datalist2.append(datalist)
datas = np.array(datalist2)
datast = datas.T
fileMatPath = filePath+"\\"+"time_data.mat"
io.savemat(fileMatPath,mdict = {'time_data':datast}, oned_as = 'row')
print "OK"

if __name__ == "__main__":
datFile = sys.argv[1]
filePath = sys.argv[2]
dataConvert = sys.argv[2]
dat2mat(datFile,filePath,dataConvert)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: