テストデータを楽に作成したいので、大量のテストデータ作成用ツールをpythonで作成しました。
具体的にはtsvにファイル名とファイルの内容を格納しておき、これを読み込んで、xmlのテンプレートの対象のタグだけ書き換えて一括でテスト用のxmlファイルを出力するものです。
##入力ファイルの準備
1.sample.tsv(出力する際のファイル名と書き換え部分の配列)
入力ファイルのサンプルです。
FILENAME SENTENCE
sample_1.xml ice cream
sample_2.xml chocolate box
sample_3.xml candy bar
2.templete.xml(出力するための元ネタとなるXML)
出力用テンプレートのサンプルです。
<root>
<Text>sweets</Text>
<originalText>sweets</originalText>
<head>sweets</head>
</root>
##XMLデータ一括出力用ツールのソース
3.exportToXML.py
#!/usr/bin/env python
import csv
import xml.etree.ElementTree as ET
import shutil
import os
import glob
#出力フォルダの初期化
for file in glob.glob('C:\\tools\\output\\*.xml', recursive=True):
os.remove(file)
#変数の宣言ファイル名と書き換えのワードを取得
#ファイル名
fName = ""
#と書き換えのワード
fDoc = ""
#インプットとなるtsvファイルを開く
tsv_file = open(r"C:\\tools\sample.tsv", "r", encoding="utf-8", errors="", newline="" )
#リーダーでファイルを解析する
f = csv.reader(tsv_file, delimiter="\t", doublequote=True, lineterminator="\n", quotechar='"', skipinitialspace=True)
data = [ v for v in f]
for i in range(len(data)):
#ヘッダーは読み込まない
if i > 0:
fName = (data[i][0])
fDoc = (data[i][1])
fPath = 'C:\\tools\\output\\' + fName
#テンプレ―トをコピーする。
shutil.copy('C:\\tools\\templete.xml',fPath)
tree = ET.parse(fPath)
root = tree.getroot()
for name in root.iter('text'):
name.text = fDoc
print(name.text)
for hname in root.iter('head'):
hname.text = fName
tree.write(fPath, encoding='UTF-8')
##実行方法
4.上記のファイル(sample.tsv、templete.xml)をC:\tools
に配置し、その配下にoutput
フォルダを作成します。
python実行環境で3のソースを実行してください。
環境作成・実行方法はこちらにまとめてあります。
■Python(anaconda)の開発環境構築手順(SpringToolsSuites )_2020.6時点
##出力結果
tsvファイルの一覧の通り、テンプレートの内容を変更して一括でファイルを出力する事ができました。
以上です。