レトロフリークのgame_database.xmlをCSV形式に変換する(PythonでXML形式からCSV形式に変換するスクリプト)

日曜日 , 19, 9月 2021 Leave a comment

レトロフリークは登録されているゲームの一覧をXML形式で出力することができます。
XML形式データでは少し扱いづらいのでCSV形式に変換するPythonスクリプトを作成してみました。

スクリーンショット 2021-09-19 090316

このプログラムでできること

このプログラムは、標準入力からレトロフリークのXML形式(※1)のデータを読み取り、CSV形式で標準出力に出力します。
Unix系のOSの場合、次のようなコマンドで実行します。

cat game_database.xml | python gamedb2csv > game_database.csv

※1 レトロフリークに登録されているゲームのデータベースファイル作成は、https://www.cybergadget.co.jp/support/retrofreak/trouble/7107/8170.html の記事をご覧ください。

game_database.xmlはUTF-8エンコーディングで保存されており、このスクリプトもエンコーディングを変換せずそのまま出力します。
Excelなどで取り込みたい場合は、Excelのテキストファイルウィザードでインポート形式を指定したり、nkfコマンドなどであらかじめシフトJIS形式に変換しておく必要があります。

2021-09-19

ソースコード

#
# レトロフリークのgame_database.xmlをCSV形式に変換する
#
# This software is distributed under the license of NYSL.
# http://www.kmonos.net/nysl/
#
# 使い方:
#  標準入力からXML形式のデータを読み取り、標準出力にCSV形式で書き
#  出します
#  cat game_database.xml | python gamedb2csv > game_database.csv
import sys
from xml.etree import ElementTree


def gamedb2csv():
    tree = ElementTree.parse(sys.stdin)
    root = tree.getroot()
    games = root.findall('game')
    if len(games) == 0:
        sys.stderr.write('No game data.\n')
        exit(-1)

    field_names = '","'.join(games[0].keys())
    sys.stdout.write(f'"{field_names}"\n')

    for game in games:
        fields = []
        for key in game.attrib:
            fields.append(f'"{game.attrib[key]}"')
        sys.stdout.write(','.join(fields) + "\n")


if __name__ == '__main__':
    gamedb2csv()
    exit(0)

Please give us your valuable comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください