1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【置換】順次に置換するスクリプト

Posted at

はじめに

XMLファイルに大量の要素を追加する作業があった。エクセルファイルにデータ内容が記載されているためそれをもとに、XML形式のテキストを作ってほしいという作業である。手作業でチマチマ作ると1000件、10000件と件数が膨大だと日が暮れても終わらない...。このような作業はスクリプトを組んでサクっと終わらせたい。

完成イメージ

例えばエクセルで下記のような指示があり、これをXML形式に変換したい。
これが10000件とかあって、手作業でXMLを作ると地獄...。
image.png

<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以外の形式でも使える。エンジニア以外でも事務作業とかで活用できたりするのかな?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?