Pythonのファイル(スクリプト)が2つある場合、2つのファイルを連続して動かすこともできます。
事例を使ってまとめてみました。
2つのファイルを連続して動かせる
Pythonを使うと、ブラウザやソフトなどの操作も効率化できます。
先日、画像ファイルをPythonを使ってWordPressに自動でアップロードするという記事を書きました。Excelでプログラミングをするならマクロがいいですが、ブラウザやソフトを使うならPython、という感じでどちらも学んでみるのがおすすめです。
Pythonでブログに画像ファイル(JPG)をアップロードする流れ。 | GO for IT 〜 税理士 植村 豪 OFFICIAL BLOG
今回の事例は、Pythonの2つのファイルの処理を連続してやるというもの。
たとえば、Excelマクロの場合、Subの後の「MF」を
1 2 3 4 5 6 7 8 |
'マクロ連続実行 Private Sub Total() Call MF Call MFSale Call MFmiharai End Sub |
と、「Sub MF()」の「MF(タイトル)」の部分を引用して「Call MF」とし、複数のマクロを並べることで、連続して実行させることができます。
同じように。Pythonでも2つのプログラムを連続して実行することができるわけです。
「1つにまとめたらいいのでは?」に思うこと
連続して実行させるなら、もう1つ新しく連続した1つのコードを書けばいいのかもしれません。
ただ、2つのプログラム(スクリプト)をまとめて書くと、コードが長くなりすぎてわかりにくくなります。
それよりはなるべく短めにしておいて、連続して操作できるようにしておき、自由度を高くしておいたほうがいいかなーというのがわたしの考えです。
2つのファイルがあるならそれぞれでも利用できますし、連続して動かすこともできるので。前述したExcelマクロの場合と同じ考え方です。
Pythonのプログラムを連続して動かすには?
では、今回の事例です。
前述したWordPressへのアップロードのプログラム、それと「JPEGファイルの画像圧縮のプログラム」を連続して動かすというもの。
カメラから取り込む写真データの容量が大きいため、まずはinboxフォルダにあるすべてのJPEGファイルをブログ用に解像度を圧縮する、次にそのファイルをWordPressにアップロードするという流れです。
それぞれ、
- Run_Resize_2560.py
- upload_image_to_wordpress.py
とすでに別のファイルがありますので、2つのファイルを連続して動かします。
「じゃあ、Pythonで2つのファイルを動かすにはどうするの?」という話ですが、「import」関数を利用します。
インポートは「import Run_Resize_2560」「import upload_image_to_wordpress」のように「import ファイル名」で書いて「.py」を入れないのがポイントです。
以下のコードを書いた新たなファイルをつくって、「Resize_and_uproad」のような名前で保存しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 |
import Run_Resize_2560 import upload_image_to_wordpress def main(): # 画像のリサイズと圧縮 Run_Resize_2560.main() # 画像のアップロード upload_image_to_wordpress.main() if __name__ == "__main__": main() |
上記の(# 画像のアップロード)は「upload_image_to_wordpress.main()」とすることで、
「upload_image_to_wordpress.py」のファイルからmainより下のコードが実行されるというしくみです。
上記の詳細なコードはこちらに載せています。
upload_image_to_wordpress.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import os import requests from requests.auth import HTTPBasicAuth from urllib.parse import quote # WordPressのREST APIのURLと認証情報を設定 WORDPRESS_URL = "https://www.gou-blog.com/wp-json/wp/v2/media" USERNAME = "GO UEMURA" # 管理画面にログインするユーザー名 PASSWORD = "znL1 32gZ WXqg JH8K o94E jp6Y" # 生成されたアプリケーションパスワード def upload_image_to_wordpress(image_path): # 認証情報を設定 auth = HTTPBasicAuth(USERNAME, PASSWORD) # ファイル名をURLエンコード filename = os.path.basename(image_path) encoded_filename = quote(filename) # ヘッダーを設定 headers = { "Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}", } # ファイルを開いてアップロード with open(image_path, 'rb') as img: response = requests.post(WORDPRESS_URL, headers=headers, files={'file': img}, auth=auth) if response.status_code == 201: pass # アップロード成功 else: pass # アップロード失敗 def process_images_in_directory(directory): for filename in os.listdir(directory): if filename.lower().endswith(('.jpg', '.jpeg')): image_path = os.path.join(directory, filename) upload_image_to_wordpress(image_path) # メイン関数を定義して、他のスクリプトから呼び出せるようにします。 def main(): IMAGE_DIRECTORY = "/Users/gouemura/Dropbox/0 inbox/" process_images_in_directory(IMAGE_DIRECTORY) if __name__ == "__main__": main() |
同じように「Run_Resize_2560.py」のほうも設定することで、inboxにあるすべてのJPEGファイルの幅を2560pixに下げて、サイズを小さくしてからWordPressにアップロードするという2つの処理が連続でできるようになります。
ということで、Pythonのプログラムを連続実行する方法についてまとめてみました。
今回のコード、Pythonで「これやりたいな」と思ったことを、ChatGPTにコードを聞いて、そのコードの意味まで学んでブログネタにしたものです。
先にやりたいことをChatGPTに聞いておき、そのコードの意味や効果を確認しつつ、記事でアウトプットして学んでいくというやり方、結果的に効率よく学べるのでおすすめです。
【編集後記】
昨日はオフ。相続メルマガの配信。EURO2024の開幕戦を早朝に見ました。まぁ、起きる時間はいつもどおりですが。来週にはコパ・アメリカ2024も開幕するので、ここから1ヶ月は楽しみが増えます。午後は長男(9)の歯医者の付き添い。歯医者の近くのスーパーのパン屋がどれもおいしそうで、かつ安い。当たりでした。その後は1日早い父の日という名目で焼き肉でした。
【昨日の1日1新】
※「1日1新」→詳細はコチラ
バローにあったパン屋