【Python】csvファイルからjson または xmlを生成する

はじめに

お世話になります、hosochinです
今回はcsvファイルを読み込んで、jsonまたはxmlファイルを生成するスクリプトをPythonを使って実装しようと思います

実装

inputとなるcsvファイル

とりあえず今回はこんな形にしてみました

id,name
001,Taro
002,Jiro

csv → json

実装

import csv
import json

def csv_to_json(input_file, output_file):
    results = []

    with open(input_file, mode='r', encoding='utf-8') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            results.append(row)

            # カラム名を変えたい場合などは以下のように記述する
            # result = {
            #     "ID": row["id"],
            #     "NAME": row["name"]
            # }
            # results.append(result)

    with open(output_file, mode='w', encoding='utf-8') as jsonfile:
        json.dump({"results": results}, jsonfile, indent=2)

if __name__ == "__main__":
    input_file = "input.csv"   # 入力となるCSVファイル名を指定してください
    output_file = "output.json"  # 出力となるJSONファイル名を指定してください
    csv_to_json(input_file, output_file)

結果

{
  "results": [
    {
      "id": "001",
      "name": "Taro"
    },
    {
      "id": "002",
      "name": "Jiro"
    }
  ]
}

csv → xml

実装

import csv
import xml.dom.minidom as minidom

def csv_to_xml(input_file, output_file):
    results = []

    with open(input_file, mode='r', encoding='utf-8') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            results.append(row)

    # XMLの整形を行う
    xml_data = minidom.Document()
    results_element = xml_data.createElement("results")
    xml_data.appendChild(results_element)

    for result in results:
        result_element = xml_data.createElement("result")
        for key, value in result.items():
            data_element = xml_data.createElement(key)
            data_element.appendChild(xml_data.createTextNode(value))
            result_element.appendChild(data_element)
        results_element.appendChild(result_element)

    # XMLをファイルに書き出す
    with open(output_file, mode='w', encoding='utf-8') as xmlfile:
        xmlfile.write(xml_data.toprettyxml(indent="  "))

if __name__ == "__main__":
    input_file = "input.csv"   # 入力となるCSVファイル名を指定してください
    output_file = "output.xml"  # 出力となるXMLファイル名を指定してください
    csv_to_xml(input_file, output_file)

結果

<?xml version="1.0" ?>
<results>
  <result>
    <id>001</id>
    <name>Taro</name>
  </result>
  <result>
    <id>002</id>
    <name>Jiro</name>
  </result>
</results>

技術Python

Posted by hosochin