【Python】htmlファイルの改行とタブを削除するやつ

概要

htmlビルダーを利用して仕事をしているのだが複雑になってくると最終的に出力されるhtmlと、デザイナーが作ったこういう風に作ってください、というモックのhtmlとちゃんとあっているかを目で確認しないといけないのは非常に面倒である。Diffツールを使おうにも改行とかタブの数が若干違う、ということで差分として出されてしまうし、どうしようかと思った。 (もしかしてまともなエンジニアは何かツールを使っていたりする…?) でもまぁ、自分でミニマムに使えるので十分、というかんじなのでツールを探さずに話を進める。

出力されているhtmlの比較にはDiffツールを使うのだが、改行とかタブの数とかをいちいち直すのも手間なので、いっそhtmlタグごとに改行してタグの前方に着いているタブ(2スペや4スペ)を削除してから、Diffツールにかければ差分もまだ少なくなるかな、というのでpythonで作った。

<div>
  <ul>
    <li><span class="aaa">aaa</span></li>
    <li><span class="bbb">bbb</span></li>
  </ul>
</div>
<div>
<ul>
<li>
<span class="aaa">
aaa
</span>
</li>
<li>
<span class="bbb">
bbb
</span>
</li>
</ul>
</div>

以下がコードである。flatten.pyという名前ででも保存して、以下のように実行すると同じフォルダにテキストファイルが出力(ファイル名はもとのtxtファイルの先頭に_(アンダースコア)が付与された名前)されるので、htmlビルダーで出力した用とデザイナーが作った用で2回実行して出力された2ファイルをDiffにかければ使える。

python3 flatten.py hogehoge.txt
python3 flatten.py fugafuga.txt
import sys
import re

argvs = sys.argv

f = open(argvs[1])
file_contents = f.read()
f.close()

replaced_val = file_contents.replace("    ", "")
replaced_val = re.sub(r'\t', "", replaced_val)

replaced_val = re.sub(r'(<!--.*?>)', '', replaced_val)
replaced_val = re.sub(r'(<.*?>)', r'\1\n', replaced_val) # \1はマッチした文字の再利用(※1)
replaced_val = re.sub(r'(\n){2,10}', '\n', replaced_val) # 10である必要はないけど

file = open('_' + argvs[1] + '.txt', 'w')
file.write(replaced_val)

感想

すごく雑だけど、チェックしやすくなったー!

参考

※1 正規表現で一致した文字列を取得し、置換のときに再利用する on Python3