Pythonの応用プログラム

パイソン

応用プログラム

現在時刻を表示する

JST(日本標準時)を設定して、現在の日本時間を表示します。

# -*- coding: utf-8 -*-
import datetime

# -------------- タイムゾーンに依存しないシンプルなコード --------------

now = datetime.datetime.now() # サーバーの現在時刻を取得

# 曜日を日本語に変換するリスト
weekdays_ja = ["月", "火", "水", "木", "金", "土", "日"]
# now.weekday() は 0(月) から 6(日) を返す
weekday_index = now.weekday()
weekday_ja = weekdays_ja[weekday_index]

# フォーマットして出力 (formatメソッドを使用)
output_text = now.strftime("%Y年%m月%d日({wk})%H:%M")
print(output_text.format(wk=weekday_ja))

input("Enterキーを押して終了します...")

以下「trinket」を使って上のプログラムをWeb上で実行(▶)してみましょう。

PDFの操作を自動化

パイソンのライブラリの中から「PyMuPDF」を使ってPDFから文章を抽出したり、ページを加工してみたりします。
最初にPyMuPDFをインストールします。

!pip install PyMuPDF

読みとりに使用するテストデータは「ihoujin.pdf」を使います。

import pymupdf
doc = pymupdf.open("ihoujin.pdf")# ihoujin.pdfを読み取り、変数docに入れる
指定したページの情報取得と文字抽出
page = doc[0] # 1ページ目の情報を取得
text = page.get_text() # 1ページ目の文字を抽出して変数textに入れる
 print(text)
実行するとPDFからテキストが取り出されました。
「結果」
異邦人(イントロ、レフ3 回) 久保田早紀1978 年
子供たちが 空に向かい 両手を ひろげ
鳥や雲や 夢までも つかもうと している・・・
※テスト用の「ihoujin.pdf」はこちらからダウンロードしてください。

画像処理を自動化

画像加工のライブラリとして「Pillow」があります。画像の読み込み、編集、保存ができます。
読みとりに使用するテスト画像は「kantan-hp.png」(512px*512px)を使います。

最初にPllowをインストールする

!pip install pillow

画像を読み込む

from PIL import Image
img = Image.open("kantan-hp.png")

画像サイズを取得する

width = img.size[0]
height = img.size[1]
print(f"画像の幅は{width}")

print(f"画像の高さは{height}")

「結果」
画像の幅は512
画像の高さは512

画像をリサイズする

resized_width = int(width * 2) # 幅を2倍にしてint型
resized_height = int(height * 0.5) # 高さを0.5倍にしてint型
resized_img = img.resize((resized_width, resized_height))
resized_img.save("resized.png")

画像を反時計回りに90度回転する

rotated_img = img.rotate(90)
rotated_img.save("rotated.png")

グレースケールに変換する

grayscale_img = img.convert("L")
grayscale_img.save("grayscale.png")

加工した画像は左サイドバーのファイルに、新しい名前で保存されています。実際に使うには︙からダウンロードして使います。

Webスクレイピングで情報取得

スクレイピングとは、インターネット上に存在するWebサイトから、膨大な量の情報を集めてくることです。ここではテストからHTMLを取得するプログラミングを学習します。
RequestsライブラリでHTMLを取得します。
※コラボではRequestsは、最初からインストールされています。
テスト用のWebサイトからHTMLを取得します(https://k-hp.com/test)

RequestsライブラリでHTMLを取得

import requests# ライブラリを呼び出す

url = "https://k-hp.com/test"# テスト用サイトを定義
response = requests.get(url) # テスト用ページからHTMLを取得
response.encoding = "utf-8" # 文字エンコードをutf-8に指定
print(response.text) # 取得したHTMLを表示

Beautiful SoupライブラリでHTMLから情報を取り出す
※コラボではBeautiful Soupは、最初からインストールされています。

Beautiful Soupライブラリでh2タグの情報を取得

from bs4 import BeautifulSoup# bs4はバージョン4の意味

soup = BeautifulSoup(response.text, "html.parser") # Beautiful SoupでHTMLを解析
h2 = soup.find("h2") # h2タグの情報を取り出す
print(h2.text)# 取得したh2タグのテキストを表示

「結果」
君はロックを聴かない

全部のh2タグを取得する

h2_tags = soup.find_all(“h2”)# すべての<h2>タグを取得
for i, h2 inenumerate(h2_tags, start=1):# 順に出力

print(f“No.{i}: {h2.text})#文字列の中に変数や式を埋め込むための便利な書き方です。



「結果」

No.1: 君はロックを聴かない
No.2: 埃まみれ ドーナツ盤には
No.3: フツフツと鳴り出す青春の音
No.4: 僕の心臓のBGMは
No.5: 君はロックなんか聴かないと思いながら
No.6: 君がロックなんか聴かないこと知ってるけど
No.7: 君はロックなんか聴かないと思いながら
No.8:

テキストの並び順を変える

reモジュールは、正規表現を使って文字列のパターンマッチングを行うためのライブラリです。 これを使うことで、文字列の検索、置換、抽出が効率的に行えます。 match():文字列の先頭が正規表現に一致するか確認します。

HTML記事(article.html)の見出し順を上昇順に変えたい

import re#reモジュールを呼び出す

# 記事を保存したファイルとソート先ファイル
INPUT_FILE = "article.html"
OUTPUT_FILE = "article_sorted.html"

# ファイルを読み込む
with open(INPUT_FILE, "r", encoding="utf-8") as f:
content = f.read()

# 見出し<h3>から次の<h3>までを「1話分」として抽出
pattern = re.compile(r'(<h3>第(\d+)話.*?</h3>.*?)(?=<h3>|$)', re.DOTALL)
episodes = pattern.findall(content)

# episodes は [(全体ブロック, "49"), (全体ブロック, "48"), ...] の形になる
# 数字でソート
episodes_sorted = sorted(episodes, key=lambda x: int(x[1]))

# 並び替えたテキストを連結
sorted_content = "\n\n".join([ep[0] for ep in episodes_sorted])

# ファイルに保存
with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
f.write(sorted_content)

print("並べ替え完了! 出力ファイル:", OUTPUT_FILE)

「結果」
並べ替え完了! 出力ファイル: article_sorted.html

トランプゲーム

ここで作成するのはPC上で楽しめる、トランプゲームの定番「神経衰弱ゲーム」のアプリです。

トランプの画像を用意する

kenneyというサイト(https://kenney.nl/)が配布している無料素材を使います。
Downloadボタンを押すと「kenny_boardgame-pack.zip」というファイルがあります。これを展開すると「ping」フォルダーにある「Card」フォルダー中の画像を利用します。今回使うのはクラブのA~5と、ハートのA~5を使います。

Ping画像を読み込む

今回Pythonの実行は、Google ColaboratoryではなくTkinterを使ってプログラムを作成します。以下はPNG画像を読み込んでCanvasウイジェットに表示するプログラムです。

import tkinter as tk

root = tk.Tk()
root.title('PhotoImage')
root.geometry('250x220')

# カードの裏面の画像ファイルを読み込む
card_back_img = tk.PhotoImage(
file='Cards\cardBack_blue1.png')

canvas_1 = tk.Canvas(
root,
width=240,
height=200)
canvas_1.pack()

canvas_1.create_image(120, 100,
image=card_back_img,
anchor='center')

root.mainloop()

コメント