GIS奮闘記

現役GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

Python で XML を CSV に変換する方法

さて、本日はPython で XML を CSV に変換する方法について書いてみようと思います。前回のエントリーでは Python で CSV を XML に変換する方法について書きましたが、今回はその逆ですね。

使用する XML

前回のエントリーで作成した prefectures.xml を使用します。興味のある方はぜひ前回のエントリーを読んでみてください。

f:id:sanvarie:20200411132917p:plain

www.gis-py.com

出力する CSV

以下のような形で CSV を出力しようと思います。

f:id:sanvarie:20200411121747p:plain

実行環境

Windows 10 64bit
Python 3.6.6

サンプルコード

prefectures.xml を CSV に変換するサンプルです。

# -*- coding: utf-8 -*-
import csv
from xml.etree import ElementTree

def xml2csv():
    input_file = r"D:\data\csv\prefectures_from_xml.csv"
    output_file = r"D:\data\csv\prefectures.xml"

    # CSV 作成
    f = open(input_file, "w")

    # ヘッダー
    output_string = "公表年,公表月,公表日,都道府県,患者数(2020年3月28日からは感染者数),現在は入院等,退院者,死亡者\n"

    # ヘッダー書き込み
    f.write(output_string)

    # XML 読込
    tree = ElementTree.parse(output_file)

    # ルート
    root = tree.getroot()

    text_list = []

    for r in root:

        if r.tag == "date":
            text_list.append(r.find('year').text)
            text_list.append(r.find('month').text)
            text_list.append(r.find('day').text)

        elif r.tag == "prefecture":
            text_list.append(r.text)

        elif r.tag == "info":
            text_list.append(r.find('cases').text)
            text_list.append(r.find('hospitalized').text)
            text_list.append(r.find('released').text)
            text_list.append(r.find('death').text)

        if len(text_list) == 8:
            # CSV に書き込み
            output_string = text_list[0] \
                            + "," + text_list[1] \
                            + "," + text_list[2] \
                            + "," + text_list[3] \
                            + "," + text_list[4] \
                            + "," + text_list[5] \
                            + "," + text_list[6] \
                            + "," + text_list[7] + "\n"

            f.write(output_string)

            # リストをクリア
            text_list = []

    f.close

if __name__ == '__main__':
    xml2csv()

結果

想定通りの形で CSV が出力されました。

f:id:sanvarie:20200411150128p:plain

さいごに

今回はさくっと終わらせることができました。前回のエントリーで CSV→XML、今回のエントリーでXML→CSV に変換する方法を紹介しました。これで相互変換が必要になっても大丈夫かと思います。前回も使用しましたが、今回も ElementTree を使用しています。Python で XML を扱う際はよく使用するライブラリかと思いますので、ぜひ色々使ってみてください。今回は以上です。