はじめに
XMLファイルに大量の要素を追加する作業があった。エクセルファイルにデータ内容が記載されているためそれをもとに、XML形式のテキストを作ってほしいという作業である。手作業でチマチマ作ると1000件、10000件と件数が膨大だと日が暮れても終わらない...。このような作業はスクリプトを組んでサクっと終わらせたい。
完成イメージ
例えばエクセルで下記のような指示があり、これをXML形式に変換したい。
これが10000件とかあって、手作業でXMLを作ると地獄...。
<Item>
<No>1</No>
<Date>2024/10/29</Date>
<Name>Yamada</Name>
<Age>23</Age>
</Item>
...以下省略
スクリプト
下記のスクリプトで置換処理を順次に行う。
import pandas
with open("template.txt", "r", encoding="utf-8") as file_obj:
template_text = file_obj.read()
df = pandas.read_excel("ReplaceList.xlsx", "List")
output_text = ""
for rowdata in df.iloc:
replaceinfo = rowdata.to_dict()
worktext = template_text
for key, value in replaceinfo.items():
worktext = worktext.replace(str(key), str(value))
output_text += worktext + "\n\n"
with open("output.txt", "w", encoding="utf-8") as file_obj:
file_obj.write(output_text)
pandas
を使って置換対象のリストを読み込む。df.iloc
から1行ごとのデータを取得する。to_dict()
メソッドを使って見出しと値のペアバリューを作る。キー値を置換元、バリュー値を置換先として置換処理を行う。
for key, value in replaceinfo.items():
worktext = worktext.replace(str(key), str(value))
テンプレートテキストは事前に用意しておく。
今回の例だと下記のようなテンプレートを用意する。
<Item>
<No>【No】</No>
<Date>【Date】</Date>
<Name>【Name】</Name>
<Age>【Age】</Age>
</Item>
見出しとなっている"【No】"などが表中の1
に置換される。これが順次処理されることで、下記のようにXMLデータが瞬時に量産される。
template.txt
<Item>
<No>1</No>
<Date>2024-10-29 00:00:00</Date>
<Name>Yamada</Name>
<Age>23</Age>
</Item>
<Item>
<No>2</No>
<Date>2024-10-30 00:00:00</Date>
<Name>Sato</Name>
<Age>35</Age>
</Item>
<Item>
<No>3</No>
<Date>2024-10-31 00:00:00</Date>
<Name>Kimura</Name>
<Age>19</Age>
</Item>
応用
template.txt
の内容を変えれば、XML以外の形式でも使える。エンジニア以外でも事務作業とかで活用できたりするのかな?