こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

PythonでXMLをcsvに変換したいです。

pythonで、特定のファルダにXMLファイルが追加されるたびにCSVファイルを新しく作成してそこに書き込んでいくという事がしたいのですが、なかなかうまくいかず困っています。
下記のようなXMLなのですが、どうしたら良いのでしょうか?

<?xml version="1.0" encoding="UTF-8"?>
<file format="current_readings" version="1.25" name="test.xml" author="verxxx x.xx">
<base>
<serial>563C10SS</serial>
<model>XXX-XXXX</model>
<name>ABC1</name>
<time_diff>540</time_diff>
<std_bias>0</std_bias>
<dst_bias>0</dst_bias>
<time_zone>(UTC+09:00) 大阪、札幌、東京</time_zone>
<lan>
<input>0</input>
<output>0</output>
</lan>
</base>
<group>
<num>0</num>
<name>Group1</name>
<remote>
<serial>AAAAAAA1</serial>
<model>XXX-NNN</model>
<num>1</num>
<name>Unit01</name>
<rssi repeater="0">5</rssi>
<ch>
<num>1</num>
<scale_expr></scale_expr>
<name></name>
<current>
<unix_time>1538008469</unix_time>
<time_str>2018-09-27 09:34:29</time_str>
<value valid="true">25.0</value>
<unit>C</unit>
<batt>5</batt>
</current>
<record>
<type>13</type>
<unix_time>1538007269</unix_time>
<data_id>884</data_id>
<interval>300</interval>
<count>5</count>
<data>
2a0f0a605f560==
</data>
</record>
</ch>
<ch>
<num>2</num>
<scale_expr></scale_expr>
<name></name>
<current>
<unix_time>1538008469</unix_time>
<time_str>2018-09-27 09:34:29</time_str>
<value valid="true">61</value>
<unit>%</unit>
<batt>5</batt>
</current>
<record>
<type>208</type>
<unix_time>1538007269</unix_time>
<data_id>884</data_id>
<interval>300</interval>
<count>5</count>
<data>
das54f0565==
</data>
</record>
</ch>
</remote>
<remote>
<serial>BBBBBBB1</serial>
<model>XXX-NNN</model>
<num>2</num>
<name>Unit02</name>
<rssi repeater="0">3</rssi>
<ch>
<num>1</num>
<scale_expr></scale_expr>
<name></name>
<current>
<unix_time>1538008192</unix_time>
<time_str>2018-09-27 09:29:52</time_str>
<value valid="true">26.0</value>
<unit>C</unit>
<batt>5</batt>
</current>
<record>
<type>13</type>
<unix_time>1538006992</unix_time>
<data_id>883</data_id>
<interval>300</interval>
<count>5</count>
<data>
54829652hughA==
</data>
</record>
</ch>
<ch>
<num>2</num>
<scale_expr></scale_expr>
<name></name>
<current>
<unix_time>1538008192</unix_time>
<time_str>2018-09-27 09:29:52</time_str>
<value valid="true">58</value>
<unit>%</unit>
<batt>5</batt>
</current>
<record>
<type>208</type>
<unix_time>1538006992</unix_time>
<data_id>883</data_id>
<interval>300</interval>
<count>5</count>
<data>
481762opjuhgft==
</data>
</record>
</ch>
</remote>
<remote>
<serial>AAABB2</serial>
<model>XXX-NNN</model>
<num>3</num>
<name>Unit03</name>
<rssi repeater="0">3</rssi>
<ch>
<num>1</num>
<scale_expr></scale_expr>
<name></name>
<current>
<unix_time>1538008214</unix_time>
<time_str>2018-09-27 09:30:14</time_str>
<value valid="true">26.5</value>
<unit>C</unit>
<batt>5</batt>
</current>
<record>
<type>13</type>
<unix_time>1538007014</unix_time>
<data_id>883</data_id>
<interval>300</interval>
<count>5</count>
<data>
7wTvBPEE8gTxBA==
</data>
</record>
</ch>
<ch>
<num>2</num>
<scale_expr></scale_expr>
<name></name>
<current>
<unix_time>1538008214</unix_time>
<time_str>2018-09-27 09:30:14</time_str>
<value valid="true">55</value>
<unit>%</unit>
<batt>5</batt>
</current>
<record>
<type>208</type>
<unix_time>1538007014</unix_time>
<data_id>883</data_id>
<interval>300</interval>
<count>5</count>
<data>
f6a72f5aaa==
</data>
</record>
</ch>
</remote>
</group>
</file>

投稿日時 - 2018-09-29 14:13:00

QNo.9542372

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんなものをだらだら引用しなくたって、要するにタグで構造化されたテキストを扱うなら、Pythonなんかは大得意な話です。

何をimportしてもいいんですが、まあbeautifulsoupでも持ってくれば一発でしょう。そんなことをしなくても大丈夫は大丈夫ですけど。

その上質問があるならお聞きしますけど、普通はあっさりできることをこんなまるごとやってくれと言わんばかりの言い方だったら答える気にもなりません。本人が何もしないで人に教えてくれというのは褒められたことじゃありませんよ。

投稿日時 - 2018-09-29 23:58:05

ANo.1

何が上手くか無いのか書かないと答えようがないと思いませんか。
少なくとも、私の部下がこんな質問してくるようなら問題視します。

文頭で「Pythonで」と書かれたら、言語に依存した質問だと思うのですが、これだけタグを羅列されたら、XMLをCSVに変換する際の仕様の話のようにも感じます。

投稿日時 - 2018-09-29 16:13:11

補足

文字かいっぱいで詳細が書けなくなってしまったためざっくりとした質問で失礼しました。
現状、はじめのformatからauthorは
elementtrenのattribを使用して取得し、csvに書き込むことが出来たのですが、その他の子要素、孫要素の内容はどの様にデータの取得・書き込みをしたら良いのかがわからなくて困っています。

投稿日時 - 2018-09-29 17:46:31