Python批量轉mat為csv

2021-10-11 19:01:51 字數 3201 閱讀 3099

matlab和python同時處理一批資料,matlab可以生成很實用的mat檔案,python可以進一步處理分析,並畫出漂亮的資料圖。

本人用matlab生成多個mat檔案,每個mat檔案中又包含struct欄位,

需要讀取每個struct中的每乙個資料,並分別在不同的資料夾下儲存為csv,資料如下圖

生成的csv分別儲存在不同的資料夾下

**如下(示例):

import pandas as pd

import scipy.io as sio

import os

import re

import numpy as np

if __name__ ==

'__main__'

: filenames_in =

'e://...//mat//num_day' # 輸入檔案的檔案位址(自行調整)

# filenames_out = 'e://program

//mat//num_day1' # 新檔案的位址(如果在這裡讀取儲存位址,會只有乙個位址,只顯示最後一次處理的資料,親測)

pathdir = os.

listdir

(filenames_in)

for alldir in pathdir:

child = re.

findall

(r"(.+?).mat"

, alldir) # 正則的方式讀取檔名,去副檔名

iflen(child)

>=

0: # 去掉沒用的系統檔案

newfile =

'' needdate = child #### 這個就是所要的檔名

domain1 = os.path.

abspath

(filenames_in) # 待處理檔案位置

info = os.path.

join

(domain1, alldir) # 拼接出待處理檔案名字

out = needdate # 獲取迴圈儲存的新資料夾名,這裡是讀到的是第乙個mat檔名,也就是希望儲存的資料夾名

filenames_out =

'e://...//mat//'

+ out[

0] #新資料夾位址=主目錄+最後乙個新資料夾名(e://

...//mat//num_day1)

mat = sio.

loadmat

(info) # 讀取第乙個mat檔案

num = mat[

'num'

] # 讀取struct

for i in range(24

):print

(info,

"開始處理"

) name =

'hour'

+str

(i+1

) domain2 = os.path.

abspath

(filenames_out) # 處理完檔案儲存位址

outfo = os.path.

join

(domain2, name +

'.csv'

) # 拼接出新檔案名字

# 在此先拼接出新的檔名,否則下條語句會重置name值

name = num[

0, i]

# result = pd.dataframe(name["result"], index=none, header=none)

# result = pd.dataframe(name["result"], index=false)

# result = pd.dataframe(name["result"], index=0)

# result = pd.dataframe(name["result"], index_col=0)

# 以上四條是想在讀取結果的時候就儲存成沒有行列索引的dataframe,均失敗

result = pd.

dataframe

(name[

"result"

]) # 「result」matlab中的結果字段,請自行根據mat檔案更改

# domain2 = os.path.abspath(filenames_out) # 處理完檔案儲存位址

# outfo = os.path.join(domain2, name+'.csv') # 拼接出新檔案名字

# 不能在此出現儲存位址

result.

to_csv

(outfo, header=none, index=none, encoding=

'utf-8'

) # 儲存檔案時沒有行列索引(注:不能存在同名檔案,最好空資料夾可執行)

# result.to_csv(outfo, header=false, index=false, encoding='utf-8')

# result.to_csv(outfo, index_col='unnamed: 0', encoding='utf-8')

# result.to_csv(outfo, index_col=0, encoding='utf-8')

# result.to_csv(outfo, encoding='utf-8') # 如無索引需求,可執行此句

print

(info,

"處理完"

)print

('*****'

) # 第乙個mat處理完成,跳出本迴圈,處理第二個mat檔案

本篇是在上篇 python批量處理csv檔案(篩選列)基礎上的改良,不僅可以迴圈處理檔案,還迴圈儲存在新的不同的資料夾。

本文的資料夾均是提前建立好的,並沒有檢測和自動建立功能,生成的csv也沒有檢測和覆蓋功能,故需新的空資料夾(可以包含非同名csv檔案)。

簡單的**解決簡單問題。

每天進步一點點!!!

python 批量檔案名字漢字轉拼音

coding utf8 import os import pypinyin from pypinyin import pinyin,lazy pinyin def rename path u c users er desktop hanzi2pinyin filelist os.listdir pa...

Python為文件批量注音(生僻字歌詞為例)

抖音配樂 生僻字 python的拼音模組 python的模組庫api,每次進去習慣第一動作,就是右鍵翻譯為中文。好羞愧,個人太愛國了,所以一直排斥學英語,好不要臉的藉口.可python的拼音模組不需要這麼做,因為涉及拼音等模組肯定和中文有關係,文件自然是中文的嘍。那麼python的拼音模組是什麼?p...

如何用python按照txt序列號批量轉移檔案?

組隊參加乙個深度學習比賽,隊友把資料已經隨機分好,為了與隊友保持資料上的一致,我需要寫乙個python指令碼,將20g的雷射點雲資料的訓練集按要求劃分。三個資料夾,分別是標定 標籤 點雲,均有6000個,每個檔名稱就是編號。提取為驗證集的編號,是乙個txt檔案,每一行存放乙個編號 shutil.mo...