用python将mat格式文件转换为csv格式文件

import pathlib
import scipy
from scipy import io
import os
import numpy as np
import pandas as pd

data_dir = "/home/smj/下载/12K驱动端轴承故障数据"
def mat_to_csv(data_dir):
    new_dir=data_dir+'csv'
    if not os.path.exists(new_dir):
        os.makedirs(new_dir)
    data_root = pathlib.Path(data_dir)
    all_image_paths = list(data_root.glob('*/'))
    all_image_paths = [str(path) for path in all_image_paths]
    for path in all_image_paths:
        every_data_name=pathlib.Path(path).name.strip('.mat')
        data=scipy.io.loadmat(path)
        key=[item for item in data]
        value=[data[item] for item in data]
        if len(key)>=5:
            key=np.expand_dims(np.array(key[3:-1]),axis=1)
        else:
            key=np.expand_dims(np.array(key[3]),axis=0)
            key=np.expand_dims(key,axis=1)
        if len(value)>=5:
            value=np.array(value[3:-1]).squeeze()
        else:
            value=value[3].T
        df=pd.DataFrame(np.hstack((value,key)))
        df.to_csv(new_dir+'/'+every_data_name+'.csv',index=None)

解读:
1.该代码保存到一个新建的文件夹中,名字只是对原来路径的名字加个csv,即新名字的路径为/home/smj/下载/12K驱动端轴承故障数据csv。
2. 因为读取mat文件返回的是一个字典,所以这里面有我需要的key和value也有不需要的value,这里体现在两个if语句里。 又因为我下的一堆mat文件里,有些key的数量为7,有些为4,而需要的key正好是从key[3]这里开始,所以有else语句,具体根据自己的mat文件所需要的来改。
3. 最终每个文件保存的名字与原mat文件保存的名字一样。比如我一个原文件地址为:/home/smj/下载/12K驱动端轴承故障数据/0.007_0_1797_B007_0.mat,那么我新文件的地址就是/home/smj/下载/12K驱动端轴承故障数据csv/0.007_0_1797_B007_0.csv 。
4. 要修改的就是2里的东西。
5. 具体key和value需要哪些位置的,可以先通过下面语句输出出来看看。
6. data=scipy.io.loadmat(path),其中path为mat文件的路径,该导入的包自己先导入一下。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值