python 批量将.mat文件转化为.txt文件并保存

因为数据处理需要用到.txt文件,但是现在只有.mat文件,所以一次性将所有.mat文件转化为.txt文件。为了示例,我将.mat文件夹放在了桌面,里面有30个.mat文件,在桌面建一个用来放置.txt文件的空文件夹。

# 导入包
import scipy.io as sio
import numpy as np
import os
# 先读取单个mat文件来看看mat文件的长什么样
matdata = sio.loadmat("C:/Users/24698/Desktop/mat_file/0001.mat")
matdata

# 提取数据:是以字典的形式存储的,看有哪些key,确认自己需要哪部分信息
matdata.keys()

# 这里我只需要"KLS_mat"中的信息,将该信息存为txt文件
data = matdata["KLS_mat"]
data

 

# 下面是正式开始批量处理啦
# 读取存放批量.mat的文件夹中的所有.mat文件的文件名
mat_filename_list = os.listdir("C:/Users/24698/Desktop/mat_file")
mat_filename_list

 

# 批量转化 mat 文件为 txt 文件并保存在桌面的 txt_file 文件夹中
for mat_filename in mat_filename_list:
    matdata = sio.loadmat("C:/Users/24698/Desktop/mat_file/" + mat_filename)
    data = matdata["KLS_mat"]
    txt_filename = mat_filename[:4] + ".txt"  # 例如将“0001.mat” 改为 “0001.txt”
    savetxt_path = "C:/Users/24698/Desktop/txt_file/" + txt_filename
    np.savetxt(savetxt_path, data, fmt="%0.8")   # fmt为保存格式,可不填,会以默认格式保存

完成!!!

更新:

朋友们,很抱歉啊,因为不经常看消息,所以回复很不及时,基本回复的时候你们问题都解决了吧,但为了之后的人看到同样问题的解决方法和出于礼貌,虽不及时我还是会回复的。对于一些问题我重新编辑一下写在下面

问题1:怎么保存为 csv 文件,原文其实也都给了一个基本思路啊。将 data 处理成 csv 数据格式DataFrame,然后使用 .to_csv()保存

# 可以看我需要的数据原本就是 array 数组数据,所以我可以直接保存为txt文件
# 大家需要保存什么类型文件一定要处理成匹配的数据格式,不然会报错
# 下面给出单个文件处理,想批量处理套进循环里就可以了
import pandas as pd

matdata = sio.loadmat("mat文件地址")
data = matdata["所需数据的key"]  # 假设这里data和我的一样是array数组
data = pd.DataFrame(data)  
data.tp_csv("csv文件保存地址")

问题2:想保存多个key的数据。这里分成两部分,一个是每个key数据保存一个文件,另一个是一个mat文件中的多个key保存为一个文件。

# 一个key保存一个文件:分别提取分别保存呗
data1 = matdata["所需数据的key1"]
data2 = matdata["所需数据的key2"]
...
np.savetxt("txt文件保存路径", data1)
np.savetxt("txt文件保存路径", data2)
...
# 多个key保存一个文件:数据拼接,注意数据拼接对数据的shape是有要求的
# 将提取的 data1, data2, ..., datan 拼接成一个data,然后保存data
# 数据拼接涉及数据格式,数据维度,比较杂,这里给出涉及到的函数,具体的可以自己去学习

# array 数据拼接,用到 numpy 包
array1 = np.vander([3,4,5])  //# array1.shape = (3,3)
array2 = np.vander([1,2,3])  //# array2.shape = (3,3)
np.vstack([array1, array2])  //# shape = (6,3), 行拼接,纵向拼接,即行数增加
np.hstack([array1, array2])  //# shape = (3,6),列拼接,横向拼接,即列数增加
np.stack([array1, array2])  //# shape = (2,3,3),维度拼接,即将每一个数组作为一个整体进行拼接

# DataFrame 数据拼接,用到 pandas 包
pd.concat([data1,data2], axis=0)  # axis=0是列数不变,行连接,axis=1是行数不变,列连接

  • 17
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值