みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Pythonでクリップボードを使った便利ツールを作る非エンジニア&Windowsユーザー向けのシリーズです。
前回の記事はコチラです。
forループでインデックスと要素の両方を取り出しながら繰り返しをする方法をお伝えしました。
さて、クリップボードに出し入れするデータは文字列になるのですが、文字列連結のステートメントって、すごくわかりづらいくなりやすいんですよね。
構文の美しさを追及しているPythonなら、何かいい方法あるのでは…?と思っていたら、すぐに見つけました。
formatメソッドです。
ということで、今回はPythonで文字列の中に変数の値を埋め込むというformatメソッドの使い方をお伝えします。
これまでの文字列連結のステートメントが一気にスッキリ読みやすくなりますよ。
では、行ってみましょう。
これまでのおさらい
まず、これまでのおさらいです。
クリップボードの内容をMarkdownのリストに変換するツール
以下プログラムは前々回作成したものです。クリップボードにコピーした内容をMarkdownでいうリストに変換するというツールです。
import pyperclip
lines =pyperclip.paste().split()
text = ''
for line in lines:
text = text + '- ' + line + '\r\n'
pyperclip.copy(text)
ここでいうと5行目の文字列連結のところ…ほかに比べて圧倒的に読みづらいですよね。
クリップボードの内容をMarkdownの番号付きリストに変換するツール
続いて、前回作成したもので、クリップボードにコピーした内容をMarkdownでいう番号付きリストに加工するというツールです。
import pyperclip
lines =pyperclip.paste().split()
text = ''
for i,line in enumerate(lines):
text = text + str(i+1) + '. ' + line + '\r\n'
pyperclip.copy(text)
こちらも5行目…非常に読みづらいですよね。
これらの読みづらい文字列連結のステートメントをわかりやすい記述に書き直そうというのが、今回のミッションです。
formatメソッドとその使い方
formatメソッドは文字列に対して使用するメソッドで、文字列の中で指定した場所に、指定した変数などの値を埋め込んで文字列を生成するというものです。
インデックスを使う方法
書き方はこうです。
これじゃわかりませんね。
文字列は、波括弧でインデックスを囲ったものを交えたものにすると、例えば{0}の位置に値0、{1}の位置に値1、…といったルールで変数の値が文字列の中に埋め込まれます。
例えば、以下にようなものですね。
>>> number=5
>>> text='テスト'
>>> '番号は{0}、テキストは{1}'.format(number,text)
'番号は5、テキストはテスト'
なお、変数が一つの場合は、インデックスは省略が可能ですので、以下のようにもできます。
>>> number=2
>>> '番号は{}'.format(number)
'番号は2'
キーワード引数を使う方法
さらに、インデックスだとちょっとわかりづらいよ、というときにはキーワード引数を設定することも可能です。
これであれば波括弧内にキーワード引数を使うことができます。
>>> '番号は{number}、テキストは{text}'.format(number=2,text='テスト')
'番号は2、テキストはテスト'
なるほど…もう文字列連結とstr関数には、だいぶと退場いただくことになりそうですね…!
文字列連結ステートメントの可読性をformat関数で高める
クリップボードの内容をMarkdownのリストに変換するツール
クリップボードにコピーした内容をMarkdownでいうリストに変換するというツールですが、以下のように変更することができます。
import pyperclip
lines =pyperclip.paste().split()
text = ''
for line in lines:
text = '{0}- {1}\r\n'.format(text,line)
pyperclip.copy(text)
文字列部分がまとまりましたので、前と比較すると読みやすくなったと思います。
クリップボードの内容をMarkdownの番号付きリストに変換するツール
こちらはクリップボードの内容を番号付きリストに変換するツールです。
import pyperclip
lines =pyperclip.paste().split()
text = ''
for i,line in enumerate(lines):
text = '{0}{1}. {2}\r\n'.format(text,i+1,line)
pyperclip.copy(text)
str関数も不要になりましたね。
まとめ
以上、Pythonで文字列の中に値を埋め込むformat関数の使い方をお伝えしました。
まだ多少読み解くのに少し時間がかかるかも知れませんが、文字列が一か所にまとまっているので比較すると可読性は上がっていますよね。
また、数値型を文字列として連結する際のstr関数などは気にしなくてよくなります。
次回、この応用でExcelに貼り付けやすくする便利ツールの作り方をお伝えしていきますね。
どうぞお楽しみに!