応用プログラム
現在時刻を表示する
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)
「結果」
異邦人(イントロ、レフ3 回) 久保田早紀1978 年
子供たちが 空に向かい 両手を ひろげ
鳥や雲や 夢までも つかもうと している・・・
画像処理を自動化
画像加工のライブラリとして「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度回転する
グレースケールに変換する
加工した画像は左サイドバーのファイルに、新しい名前で保存されています。実際に使うには︙からダウンロードして使います。
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()







コメント