みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
非エンジニアでも簡単にできるPythonによるクリップボードを使ったツールの作り方をお伝えしています。
前回の記事はコチラ。
文字列に変数などの値を埋め込むことができるformatメソッドについてお伝えしました。
さて、今回ですが、これまでお伝えした内容の応用編。
例えばWebページでコピーした内容を、Excelシートに表形式に貼り付けたいけど、うまくいかなくてムシャクシャ…!
…というときありますよね!?
それをPytonでササっとツールを作っちゃって解決しようというのが本日のお題です。
ということで、Pythonでクリップボードにコピーした内容をExcelシートに表形式で貼り付けられるようにいい感じに変換するツールの作り方です。
では、行ってみましょう。
Webページの定義リストをExcelの表形式にしたい
今回は以下のページからJavaScriptのメソッド一覧を取得してみたいと思います。
Pythonの記事なのに、JavaScriptのページを取得しますw
メソッド一覧ですが、以下のように、見た目ではメソッド名、解説が交互に改行されて表示されている状態、HTML的には定義リストを使った表記になっています。
これを、メソッド名と解説が一行になるように、Excelシート上にデータを取得したいのです。
普通にコピー&ペーストをした場合
まさか、一行ずつマウスでコピペ…してませんよね?
そうでなくても、まとめてやろうにしても、ちょっと面倒です。
例えば、以下のように範囲選択をしてから Ctrl + C でクリップボードにコピーしますね。
その状態で、 Ctrl + V でExcelシートに貼り付けると、以下のようにメソッド名と解説が同じ列の別の行に交互に貼り付けとなってしまいました。
エクセルVBAマクロを作れば対応はできますが、エクセルVBAはファイル単位で仕込まないといけませんし、シートに書き出してからセルの場所を変えていく処理…意外と面倒だと思います。
おそらく、Pythonのほうが手っ取り早く解決ができます。
定義リストを表形式に変換するPythonスクリプト
今回、作成したPythonのスクリプトがこちらです。
import pyperclip
lines =pyperclip.paste().split('\r\n')
text = ''
for i in range(0,len(lines),2):
text = '{0}{1}\t{2}\n'.format(text,lines[i],lines[i+1])
pyperclip.copy(text)
今まで出てきた内容を応用すれば完成しちゃいます。
以下、それぞれ解説をしていきますね。
pyperclipモジュールとその使い方
今回もクリップボードを使うので、pyperclipモジュールのインポートをしつつ、クリップボードからのテキストデータ取得にpaste関数、クリップボードへのテキストデータコピーにcopy関数を使います。
以下記事もご参考ください。
改行コードで区切ってリスト化
pyperclip.paste関数で取得したクリップボードのデータは、長い文字列になっていますので、まずは一行単位で区切ってリスト化します。
その場合、「\r\n」つまりWindowsの改行コードCRLFを区切り文字としてsplitメソッドを使いますね。
区切り文字を省略すると空白文字(スペース、改行、タブ)は全部いい感じで区切ってくれるのですが、今回は解説の文字列の中にスペースが微妙に混じっていて、そこで区切られると困っちゃうので、「\r\n」をズバっと指定しています。
2行単位でforループを回す
forループですが、今回は2ずつ回すというのがコツです。
というのも、クリップボードから取得したテキストは、1行目にメソッド名、2行目に解説、3行目に別のメソッド名、…といった2行単位の構成となっていますからね。
その場合は、range関数を使ったforループになり、ステップに2を設定すればよいということです。
# 処理
なお、開始値はリストの最初のインデックス0、終了値はインデックスの要素数ですのでlen関数を使います。
formatメソッドを使った文字列の連結
forループを回しながら、変数textにクリップボードに戻す用のテキストを生成していきます。
内容としては、毎回のループでtext{0}に
- 偶数番号のリストの要素{1}=メソッド名
- タブ(\t)
- 奇数番号のリストの要素{2}=解説
- 改行(\n)
を連結するという処理です。少しややこしいですが、一個ずつ確認すればそこまで難しくはないはず。なにせformatメソッドを使っていますから。
定義リストをExcelシートに貼り付けた結果
では、作成したスクリプトでコピペを実行してみましょう。
まず、先ほどのWebページからメソッドの解説部分を範囲選択してクリップボードにコピーします。
次に、上記Pythonスクリプトを実行。
その上で、Excelシートに貼り付けてみましょう。
はい、ちゃんとA列にメソッド名、B列にその解説、といったように表形式でペーストされていますね。
まとめ
Pythonでクリップボードの内容をExcel形式にペーストできるように整形するスクリプトを作りました。
Webページによってはいろんなパターンがあると思いますので、それに合わせて調整加えるとよいです。
Python…今回みたいな、ちょこちょこした、ある意味使い捨てツールを作るのにもすごく適していると感じました。
さて、次回ですが、このツールをファイル書き込みできるようにして、パワーアップさせていきたいと思います。
どうぞお楽しみに!