データベース検索ができる簡易デスクトップアプリ作成【whileループ】
SQLite3を使用して医薬品副作用データベース(JADER)からデータを取得し、医薬品名もしくは副作用から検索し集計するpythonファイルを作成しました。せっかく作ったので、使い倒したいですよね。なので、簡単に実行できるようにbatファイルの作成をしていきたいと思います。
batファイル作成
batファイルの作成は以前の投稿でも紹介しており、作成時のポイント等はそちらでご確認ください。
前回の投稿で作成した「side_effects.py」を実行するためのbatファイルの中身は以下のようになります。ディレクトリパスには、pyファイルとdbファイルが保存してあるディレクトリを入れてください。
cd ディレクトリパス
py side_effects.py
pause
このbatファイルを作成しショートカットをデスクトップに配置したら、いつでもデータベースへアクセスできてしまいます!
・・・確かにできましたよ。できましたけど、1回検索したら終了してしまいます(当然だけど)。
毎回batファイル(or そのショートカット)のアイコンをクリックして実行するのではなく、連続的に検索が行えると楽ですよね。
スクリプトの再実行
Pythonスクリプトを実行し、終了した後に再度実行するか確認を求めるようにすれば、連続的な実行が可能になります。
方法としては、以下の2種類があります。
batファイル内で制御する方法
Pythonスクリプト内で制御する方法
シンプルなのは1の方法で、pythonスクリプトを変更する必要がないのがメリットです。ただし、コマンドラインの操作への慣れが必要です。
というわけで、2の方法で何とか再実行できるように、コードを修正していきたいと思います。
ループを追加
while文
これまでループ処理をする際にfor文を使用してきましたが、while文を使用し繰り返し処理を行うことも出来ます。while文は、条件式が真(True)の間は繰り返し処理を行います。
例えば、以下のような感じです。
count = 0
while count < 5:
print(count)
count += 1
「count += 1」で実行するたびにcountに1ずつ足されていきます。countは0から始まり1ずつ足されていきます。従って、count=4までは真(True)なので実行(printで表示)されますが、count=5では偽(False)なので実行されません。
while Trueの無限ループと組み合わせる
while文は真の間はループし続けるので、while Trueで無限にループします。条件を偽にするかbreakを入れることで、無限ループは終了します。なので、終了するかどうかの分岐を作り、回答に応じてbreakを入れると任意のタイミングで終了させることができます。
例えば、「終了しますか?」の問いに対してYesの「y」を回答すれば終了(break)、「y」以外の回答であれば継続(continue)という分岐を作成したいと思います。処理自体は、現在の時刻を取得して表示させるだけのシンプルなもので、main()という関数として定義しています。
import datetime
def main():
now = datetime.datetime.now().strftime('%H時%M分%S秒')
print(f'ただ今の時刻は、{now}です。')
while True:
main()
user_input = input('終了しますか?(y/):')
if user_input == 'y':
break
else:
continue
実行結果です。
main()が呼ばれ、現在の時刻が表示されました。次にinput()でユーザーの意思表示が求められます。
「y」以外の文字を入力すると、条件分岐のelse(continue)となるので処理はループし、main()が再び呼ばれます。このループは「y」を入力するまで続きます。
こうしておけば、pythonファイル内でループしてくれます。つまり、batファイルはpythonファイルを召喚するだけなので、上記の単純なコマンドだけで済みます。
また、今回は行いたい処理をmain()という関数にまとめてみました。別にwhile Trueの中に処理を書いても良いですが、main()の中身を入れ替えれば別のスクリプトでも今回と同じようにループ処理できます。書き方を工夫すれば、コードの再利用性や保守性が向上します!
今回のコードを踏まえ、次回は医薬品副作用データベースを簡単に召喚できる簡易デスクトップアプリを仕上げていきたいと思います。