はじめに
Webに公開するブログ記事等の下書きにGoogleドキュメントを使っていて、見出し構造や強調等の修飾を維持したままWordPressに貼り付けることがよくあります。
Googleドキュメントは便利で好きなのですが、WordPress上で直接編集していないことの弊害もありまして、以下のような煩わしい追加作業が毎回発生しています。
- WordPressへの貼り付け時に自動的に各行に付与される
<span style="font-weight: 400;">
というタグを削除 - 下書き時に便宜上付けている
#
や##
といった記号を削除
これらを毎回サクラエディタの置換で削除するのは手間です。
そこで、この面倒な置換作業を一瞬で終えるPythonプログラムを作成しました。
というのも、『退屈なことはPythonにやらせよう』1という書籍を最近読みまして。
作業を自動化していくモチベーションが湧いたわけです。
何ができるのか
実際にどのような機能か、例を紹介します。
Googleドキュメント上
WordPressへの貼り付け後
WordPressの「ビジュアルモード」で貼り付け、「テキスト」モードで確認すると以下の通りです。
<span style="font-weight: 400;">こんにちは。</span>
<b>Pythonで単純作業を自動化</b><span style="font-weight: 400;">、とても楽しいですよね。</span>
<span style="font-weight: 400;">今回は『退屈なことはPythonにやらせよう』について紹介します。</span>
<h2><span style="font-weight: 400;"># 『退屈なことはPythonにやらせよう』とは</span></h2>
<span style="font-weight: 400;">2017年6月に出版されました。</span>
<span style="font-weight: 400;">書店で平積みになっているのを目にした方も多いのでは?</span>
<h3><span style="font-weight: 400;">## ノンプログラマにも</span></h3>
<b>ノンプログラマ</b><span style="font-weight: 400;">向けに書かれています。</span>
<h3><span style="font-weight: 400;">## プログラマにも</span></h3>
<b>プログラマ</b><span style="font-weight: 400;">にもおすすめです。</span>
<h2><span style="font-weight: 400;"># まとめ</span></h2>
<span style="font-weight: 400;">みなさんも、レッツ</span><b>自動化</b><span style="font-weight: 400;">!</span>
見出しや強調をそのまま貼り付けたいとはいえ、ここからいちいち<span style="font-weight: 400;">
や##
などを削除するのは面倒ですね。
今回のプログラム実行後
それが、今回のプログラムを実行すると一瞬で以下の通りです。
こんにちは。
<b>Pythonで単純作業を自動化</b>、とても楽しいですよね。
今回は『退屈なことはPythonにやらせよう』について紹介します。
<h3>『退屈なことはPythonにやらせよう』とは</h3>
2017年6月に出版されました。
書店で平積みになっているのを目にした方も多いのでは?
<h4>ノンプログラマにも</h4>
<b>ノンプログラマ</b>向けに書かれています。
<h4>プログラマにも</h4>
<b>プログラマ</b>にもおすすめです。
<h3>まとめ</h3>
みなさんも、レッツ<b>自動化</b>!
なんて素敵!自動化って素晴らしい…!
それでは、レッツ自動化!!
環境
- Windows10 64bit
- Python3.5
方針
- Python3でpyperclipモジュールを使用し、クリップボード上で置換
- .batファイルを用いてプログラムの実行を省力化
- 想定外の置換が発生していないか確認するため、置換数を処理後に表示
コード
まずはコードについて、次に実行方法について説明します。
1. モジュールのインポート
import pyperclip
import re
from ctypes import *
2. 文字列置換用の関数を定義
- seq_before: 置換前
- seq_after: 置換後
- text: 置換対象の文章
def wp_0011(seq_before, seq_after, text):
conv = re.compile(seq_before) # 置換部分検索用のRegexオブジェクトを生成
num = len(conv.findall(text)) # 置換した数
result = seq_before + ': ' + str(num)
text = conv.sub(seq_after, text) # 文章を置換
return result, text # 置換した数、置換後の文章を返す
3. クリップボードの文章を読み込み
text = pyperclip.paste()
4. 各置換を実行
res_list = [] # 置換数の表示用
# 1.<span style="font-weight: 400;">→削除
seq_before = r'<span style="font-weight: 400;">'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
# 2.</span>→削除
seq_before = r'</span>'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
# 3.### , ## , # ,→削除
seq_before = r'#{1,3}\s'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
# 4.h3>→h4>, h2>→h3>
seq_before = r'h3>'
seq_after = r'h4>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
seq_before = r'h2>'
seq_after = r'h3>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
5. 置換後の文章をクリップボードに貼り付け
pyperclip.copy(text)
6. 置換結果をメッセージボックスに表示
コンソール上にprint()
しても処理終了後は一瞬で消えてしまうため、メッセージボックスを表示させました。
他にも、print()
してからinput()
で標準入力を待つことでコンソールが消えるのを防ぐ案もありますが、メッセージボックスを使ってみたかったのです。
results = '\n'.join(res_list)
# 結果確認用にWindowsのメッセージボックスを表示
user32 = windll.user32
user32.MessageBoxW(
0,
results,
"Results",
0x00000040)
使い方
.batファイルを用いて、キーボード上で数回操作するだけで実行できるようにします。
準備
- 上で作った.pyファイルのファイル名を
WP_0011.py
- .batファイルを
WP_0011.bat
とします。
- .batファイルを作成(後述)
-
WP_0011.py
,WP_0011.bat
を同じフォルダに保存 - 「環境設定」から保存フォルダへのPathを通す
.batファイルの中身
python [full path]\WP_0011.py
.pyファイルは絶対パスを入力
使用
- 変換したいテキストをコピー
-
Windows + R
で「ファイル名を指定して実行」を起動し、WP_0011.bat
と入力→Enter
で実行 - 変換後のテキストがクリップボードに保存され、変換結果がメッセージウインドウで表示されるので
Enter
で閉じる - テキストをペースト
※次回以降はWindows + R
→Enter
で即実行される。
「ファイル名を指定して実行」で別のプログラムを実行した場合は、上下矢印キーでWP_0011.bat
を探せる。
まとめ
無事、煩わしい置換作業を一瞬で実行できるようになりました。
Windows + R
→Enter
で実行できる点がお気に入りです。
マウス操作不要なのは嬉しいですよね。
参考
コードは以下を参考にさせていただきました。
- 『退屈なことはPythonにやらせよう――ノンプログラマーにもできる自動化処理プログラミング』O'Reilly Japan
- Python から Windows API を呼び出す - MessageBox の例 - Python 入門
GitHub
ソースコードをGitHub上で公開しています。
https://github.com/kokokocococo555/automate/tree/master/convert
コード全体
#! python3
# WP_0011.py - google docsからWPへコピーした際のHTMLの整形のため、クリップボードのテキストに以下の変換を行う
# 1.<span style="font-weight: 400;">→削除
# 2.</span>→削除
# 3.### , ## , # ,→削除
# 4.h3>→h4>, h2>→h3>
import pyperclip
import re
from ctypes import *
def wp_0011(seq_before, seq_after, text):
conv = re.compile(seq_before)
num = len(conv.findall(text))
result = seq_before + ': ' + str(num)
text = conv.sub(seq_after, text)
return result, text
text = pyperclip.paste()
res_list = []
# 1.<span style="font-weight: 400;">→削除
seq_before = r'<span style="font-weight: 400;">'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
# 2.</span>→削除
seq_before = r'</span>'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
# 3.### , ## , # ,→削除
seq_before = r'#{1,3}\s'
seq_after = ''
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
# 4.h3>→h4>, h2>→h3>
seq_before = r'h3>'
seq_after = r'h4>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
seq_before = r'h2>'
seq_after = r'h3>'
texts = wp_0011(seq_before, seq_after, text)
res_list.append(texts[0])
text = texts[1]
pyperclip.copy(text)
results = '\n'.join(res_list)
# 結果確認用にWindowsのメッセージボックスを表示
user32 = windll.user32
user32.MessageBoxW(
0,
results,
"Results",
0x00000040)
-
O'REILLY JAPANから2017年6月に出版された本です。前から読みたいと思っていたので、読めて嬉しかったです。 ↩