LoginSignup
0
2

More than 3 years have passed since last update.

[Python]ランダムに発生するXMLを解析する[ElementTree]

Posted at

ライブラリインポート

XML解析に必要なライブラリElementTreeをインポートします。
globはフォルダ内のXMLのPathを取得
pandasは配列に格納。pandasからcsvに書き出しとMySQLに保存を実行します。

from xml.etree import ElementTree
import glob
import pandas as pd

XML

こんな感じのXMLデータを解析します。
offsetは秒単位の時間が格納されています。
86400秒は24時間

-<Day>
 -<EventCollection>
  -<Event>
   <Offset>0</Offset>
   <Value>70</Value>
  </Event>
  -<Event>
   <Offset>86400</Offset>
   <Value>69</Value>
  </Event>
   -<Event>
   <Offset>172800</Offset>
   <Value>73</Value>
  </Event>
<Day>

フォルダからXMLを取得して解析

フォルダ内にダウンロードされたXMLのPathを取得して解析します。

xmlfile = glob.glob("C:/Users/user/*") #fileにXMLファイルパスを格納

file = len(xmlfile) #XMLファイル数をカウント

i_file = 0 #XMLファイルを上から順番に指定するための番号_0が一番最初

for i in range(file):
    XMLFILE = xmlfile[i_file]
    i_file += 1
    tree = ElementTree.parse(XMLFILE)  # XMLファイル読み込み
    root = tree.getroot() # XMLの中身を取得

    # listを準備
    Day = [] 
    Night = []

    #forを利用して数値を全てlistに格納
    for e in root.findall('.//Day/EventCollection/Event/Value'):
        Day.append(e.text)
    for e in root.findall('.//Night/EventCollection/Event/Value'):
        Night.append(e.text)

    print(Day)
    [70,69,73]

ListをPandasに格納してからcsvに保存


#listを1つにまとめる
listData = [Day, Night]

# listDataをDataFrameに変換。.Tは行と列を入れ替え
df = pd.DataFrame(listData).T

# カラム名を追加
df.columns = ['Day', 'Night']

#csvのpathを設定してpandasDataFramをcsvに保存
filename = 'C:/Users/user/csv/AAA.csv'
df.to_csv(filename, index=False)

MySQLにDataFrameを保存

csvで出力したDataFrameをMySQLにも保存します。

ライブラリをインポート

from sqlalchemy import create_engine
url = 'mysql+mysqlconnector://[user]:[pass]@[host]:[port]/sampleDB'
engine = create_engine(url, echo=True)

#df.to_sqlで'sampleDB_table'にdfに格納したデータを保存
df.to_sql('sampleDB_table', engine, index=False, if_exists='append')

これを私はFileMakerから実行させていますが、Windowsであればタスクスケジューラなどで定期的に実行させればデータが自動的にデータベースに格納されていき、のちの解析に使えるようになります。
今後は、PHP、javascriptなどを利用してデータの見える化(BIツール)、その次に機械学習(AI)に取り組んでいきたいと考えています。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2