MF4データの読み込み
別のサイトで取り扱ってきた、PythonのTIPSについて、こちらでも掲載していくことにいたしました。
みなさま、よろしくお願いいたします。
こちらでは、Pythonのなかでも主にPySimpleGUIを用いたMDF/MF4関連のasammdfを用いた手法について、
備忘録を兼ねて情報を発信していきますので、お付き合い願います。
いきなりなのですが、GUIからMF4ファイルを選択すると、
MF4データ内のデータリスト(キーリスト)をCSVとして出力するコードです。
import PySimpleGUI as sg
from MdfListView import Mdf2ListView_Wrapper
#sg.theme('DarkAmber')
layout = [
[sg.Text('Select Target File')],
[sg.FileBrowse(), sg.Input(key='Select1')],
[sg.Text(size=(80,1))],
[sg.OK(), sg.Cancel()]
]
window = sg.Window('MdfListView', layout, default_element_size=(60, 1), grab_anywhere=False)
while True:
event, values = window.read()
i = 0
jobCue = []
if event in (sg.WIN_CLOSED, 'Cancel'):
break
if event in (sg.Print, 'OK'):
Mdf2ListView_Wrapper(values['Select1'])
break
window.close()
こちらら、GUIのコードから呼び出されるMdf2ListView.pyのコードとなります。
import os
import time
import utyMDF
import json
import mdfreader
from asammdf import MDF
from pyunpack import Archive
import matplotlib.pyplot as plt
import pandas as pd
from utyGLO import FindCharIndex
def GenerateCsv2(mdfList, csvFile):
columns1 =["Data"]
df=pd.DataFrame(data = mdfList, columns = columns1)
df.to_csv(csvFile)
def MdfListView_Main(mdfFile, csvFile):
mdfData = utyMDF.MDF_Open(mdfFile)
mdfList = utyMDF.ExtractMdf(mdfData)
GenerateCsv2(mdfList, csvFile)
def Mdf2ListView_Wrapper(mdfFile):
Index,rIndex = FindCharIndex(mdfFile,'.')
fileName = mdfFile[0:rIndex]
MdfListView_Main(mdfFile, fileName+".csv")
if __name__ == "__main__":
mdfFile = "/Users/Python/demo.mf4"
csvFile = "/Users/Python/demo.csv"
MdfListView_Main(mdfFile, csvFile)
こちらは、MdfListView_Mainから呼び出されるutyMDF.pyのコードとなります。
from asammdf import MDF
from pyunpack import Archive
from utyGLO import FindCharIndex
def MDF_Open(Arg):
# MDF file open by asammdf and retunr the data
Index,rIndex = FindCharIndex(Arg,'.')
lenArg = len(Arg)
FirstHalf = Arg[0:Index] # ファイル名先端から最初のドット(.)までの文字列を格納
SecondHalf = Arg[rIndex:lenArg]
if (SecondHalf == ".7z"):
Index,rIndex = FindCharIndex(FirstHalf,'/')
FirstHalf2 = FirstHalf[0:rIndex]
print("Call 7z!!")
lst = Archive(Arg).extractall(FirstHalf2)
print("Sorry,the script only suppor extract of 7z files")
else:
mdf = MDF(Arg)
return (mdf)
def ExtractMdf(mdfData):
data = []
for c in mdfData.channels_db:
data.append(c)
return(data)
最後にファイル名を処理するためのutyGLO.pyです
def FindCharIndex(Arg, Chr):
# 文字列 Arg 内にある Chr で指定された文字の位置を返します
Index = Arg.find(Chr) # 左から検索した結果
rIndex = Arg.rfind(Chr) # 右から検索した結果
# 戻り値として、左検索の結果と右検索の結果を返します
return(Index, rIndex)
次回以降、各コードの説明とともに、機能の拡張を進めていきたいと考えておりますので、
お付き合いお願いいたします。
#Python, #asammdf, #PySimpleGUI, #MF4, #MDF
最近のコメント