見出し画像

Webアプリ制作で便利なPython標準ライブラリ2選

こんにちは、主にバックエンドを担当しているsoeです。

弊社のATS(Applicant Tracking System)であるOwnedMakerではPython製WebフレームワークのDjangoを使っています。Pythonには「batteries included(バッテリー同梱)」という「ユーザーがわざわざ準備しなくても基本的な機能は最初からいろいろ揃ってますよ」という哲学があります。この哲学はめんどくさがりな人にとってはとてもありがたいです。

例えばOwnedMakerには、ユーザーが作成した求人をXMLデータにして、IndeedにFTPでフィード投稿し、Indeedでも求人が掲載されるようにする実装があります。当初はみなさんおなじみのFFFTPというFTPクライアントソフトを使って手動で送信していましたが、自動化したいということでDjangoから直接送ることを考えました。そのときも新たにFTPのライブラリを追加することなく、Pythonの標準ライブラリ「ftplib」を使って頭を悩ますことなく実装することができました。ライブラリの追加作業が省けるということも大事ですが、環境をいじって余計なエラーを吐き出すリスクを下げる、ということが一番大事だと思います。

このようにPythonには便利な標準ライブラリが備わっており、これを使いこなすことがPythonマスターへの第一歩であり、自分も日々勉強中なんですが、初学者にとってはたくさんありすぎてどこから手を付けていいかわからないです。そこでDjangoでWebアプリ作成する上で便利なものに絞って2つ紹介してみようかと思います。

1. collections.Counter
あるデータの出現回数を知りたいとき、データベースからのデータQuerySetであればなるべくDjangoのO/Rマッパーを使ったほうが高速ですが、かゆいところに手が届かなかったり、他のデータを利用する場合には別の手段が必要です。

collections.Counterを使うとこのあたりのデータさばきが簡単にできてとても便利です。重複を排除するには集合set()を用いれば可能ですが、重複した回数などのもっと詳しい情報を得たいときにも使えます。Chart.jsなどのフロントエンドのグラフ描画系ライブラリとの相性もばっちりで、データを扱う人は絶対に知っておきたい一品?です。

from collections import Counter
data = ['aaa', 'bbb', 'ccc', 'aaa']

>>> Counter(data)
Counter({'aaa': 2, 'bbb': 1, 'ccc': 1})


>>> [ (key, value) for key, value in Counter(data).items() if value > 1 ]
[('aaa', 2)] # 重複している項目とその重複回数をゲット!


2. io
これはいったい何でしょうか。いろんな定義があるようですが、自分は「あたかもファイルオブジェクトかのようにふるまうオブジェクト」を作成するツールと認識しています。

例えばアップロードされた画像をリサイズしたいとき、Googleで調べると「ファイルから読み込んだ画像をリサイズするコード」が見つかったとします。

from PIL import Image
im = Image.open('path/to/sample.jpg')
im = im.resize((640, 360), Image.ANTIALIAS)
略

一方でDjango側でアップロードされたファイルはオブジェクトとして以下のように取得できると思います(例)

class SampleView(TemplateView):
  def post(self, request):
    file = request.FILES.get('image')
       略

調べたコードはあくまで「ファイルから読み込んだ画像」なのでアップロードされたファイルには適応できません。こういうときはioを使ってアップロードされたファイルもファイルから読み込んだようにふるまわせればOKです。

class SampleView(TemplateView):
  def post(self, request):
    file = request.FILES.get('image')
      image_file = io.BytesIO(file.read())
      im = Image.open(image_file)
      im = im.resize((640, 360), Image.ANTIALIAS)
      略

他にも詳しい説明は割愛しますが、Shift-JISの文字コードのCSVを書き出すときも、このioが活躍しました。というわけでしっかりとしたWebアプリは作る際には必須のライブラリかもしれません。

まとめ

標準ライブラリに関しては気が向いた時によさげなものがないか調べたりしていますが、毎回調べるたびに新たな発見がありまだまだ勉強中の身です。「絶対にこれは知っておけ」というものがあればぜひ気軽にコメントに寄せてもらうとありがたいです!

参考文献
https://docs.python.org/ja/3/tutorial/stdlib.html

https://note.nkmk.me/python-pillow-basic/

https://www.haya-programming.com/entry/2018/07/03/042203

サムネ画像
https://pixabay.com/ja/illustrations/%E9%96%8B%E7%99%BA%E8%80%85-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-%E6%8A%80%E8%A1%93-3461405/


この記事が気に入ったらサポートをしてみませんか?