著者:降籏洋行、西川公一朗
Pythonには、豊富な機能を備える標準ライブラリが用意されています。しかし機能豊富すぎるが故に、初心者にとっては「この標準ライブラリモジュールは、実際の開発において、こういう時に役に立つ」という情報を探しにくかったり、リファレンスの説明だけだと使用方法をイメージしづらかったりします。本特集では、知っておくと役立つ便利な標準ライブラリモジュール9個を厳選して、その活用法を紹介します。
シェルスクリプトマガジン Vol.57は以下のリンク先でご購入できます。
1 2 3 4 5 |
from pathlib import Path for p in Path('.').rglob('*.txt'): # パターンマッチ print(f'ディレクトリ: {p.parent.resolve()}') # ディレクトリの絶対パス print(f'ファイル: {p.name}') # ファイル名 print(p.read_text()) # ファイルの内容 |
1 2 3 4 |
def is_sushi(name): """お寿司かどうかチェックして真偽値を返す""" sushi = ['マグロ', 'イクラ', 'エビ'] return name in sushi |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def is_sushi(name): """お寿司かどうかチェックして真偽値を返す >>> is_sushi('マグロ') True >>> is_sushi('タマゴ') # わざとdoctest実行が失敗するように記述 True # (1) """ sushi = ['マグロ', 'イクラ', 'エビ'] return name in sushi if __name__ == "__main__": from doctest import testmod testmod() |
1 2 3 4 5 6 7 8 9 10 |
def is_sushi(name): """お寿司かどうかチェックして真偽値を返す >>> is_sushi(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined """ sushi = ['マグロ', 'イクラ', 'エビ'] return name in sushi |
1 2 3 4 5 6 7 8 9 10 |
def is_sushi(name): """お寿司かどうかチェックして真偽値を返す >>> is_sushi(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined """ sushi = ['マグロ', 'イクラ', 'エビ'] return name in sushi |
1 2 3 4 5 6 7 8 9 10 |
def is_sushi(name): """お寿司かどうかチェックして真偽値を返す >>> is_sushi(x) Traceback (most recent call last): ... NameError: name 'x' is not defined """ sushi = ['マグロ', 'イクラ', 'エビ'] return name in sushi |
1 2 3 4 5 6 7 8 9 10 11 |
import doctest import unittest import menu suite = unittest.TestSuite() # unittestのテストスイートに追加する suite.addTest(doctest.DocTestSuite(menu)) runner = unittest.TextTestRunner(verbosity=2) runner.run(suite) |
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 |
# kaikei.py import sys # ネタと価格 menu = { 'マグロ': 200, 'はまち': 100, 'サーモン': 150, } def get_amount(*orders): amount = 0 # 合計金額 ordered = set() # 注文済みのネタ for order in orders: if order in ordered: # 注文済みのネタは割引 amount += menu[order] * 0.9 else: amount += menu[order] # 注文済みにする ordered = {order} return int(amount) if __name__ == '__main__': orders = sys.argv[1:] amount = get_amount(*orders) print(f'合計金額: {amount}円') |
1 2 3 4 5 6 7 8 9 10 |
ORDER_DICT = { "マグロの鉄火丼": 1300, "ウニとイクラのパスタ": 1500, "ドリンク": 550, } if __name__ == "__main__": for name, price in ORDER_DICT.items(): # f-stringを利用し、25文字幅で左揃えする print(f"{name:<25}:{price}") |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from unicodedata import east_asian_width ORDER_DICT = { "マグロの鉄火丼": 1300, "ウニとイクラのパスタ": 1500, "ドリンク": 550, } def get_text(name, max_count): count = 0 for char in name: if east_asian_width(char) in ['F', 'W', 'A']: count += 2 else: count += 1 # 文字最大幅から指定した文字列の幅を引いた分だけ半角スペースを付与 text = f'{name + (" " * (max_count - count))}' return text if __name__ == "__main__": for name, price in ORDER_DICT.items(): text = get_text(name, 25) print(f"{text}:{price}") |
1 2 3 4 |
from http.server import HTTPServer, SimpleHTTPRequestHandler httpd = HTTPServer(("localhost", 8888), SimpleHTTPRequestHandler) httpd.serve_forever() |
1 2 3 4 5 6 |
from http.server import HTTPServer, SimpleHTTPRequestHandler def run(): """ エントリポイントとして指定する関数 """ httpd = HTTPServer(("localhost", 8888), SimpleHTTPRequestHandler) httpd.serve_forever() |