便利な標準ライブラリ、サードパーティ製パッケージ

  • コラムのコードを実行した Jupyter Notebook

Pythonの付属バッテリー、標準ライブラリ

sysとos:システムパラメータとOS


In [6]:
import os
os.mkdir('spam') # ディレクトリを作成する
os.chdir('spam') # ディレクトリを移動する
os.getcwd() # 現在のディレクトリを取得する

os.chdir('..') # 元のディレクトリに戻る


Out[6]:
'/Users/takanori/Books/pymook-samplecode/2_column/spam/spam'

In [2]:
import sys
sys.exit(1) # 終了ステータス1で異常終了する


An exception has occurred, use %tb to see the full traceback.

SystemExit: 1
/Users/takanori/Books/pymook-samplecode/2_column/env/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2870: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
  warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

timeとdatetime:日付と時刻


In [3]:
import time
localtime = time.localtime() # 現在時刻をローカルタイムで取得する
time.strftime('%Y-%m-%d %H:%M:%S', localtime) # 日時をフォーマットして返す


Out[3]:
'2017-08-03 23:57:40'

In [4]:
import datetime
now = datetime.datetime.now() # 現在日時を取得する
now.isoformat() # 現在日時をISOフォーマットで返す


Out[4]:
'2017-08-03T23:57:53.926785'

In [5]:
nextyear = datetime.datetime(2018, 1, 1) # 2018年の1月1日の日時を生成
delta = nextyear - now
delta.days # 来年まで261日あることを確認


Out[5]:
150

mathとrandom:数学関数と乱数


In [7]:
import math
print(math.pi) # 定数π
print(math.sqrt(2)) # 平方根


3.141592653589793
1.4142135623730951

In [8]:
import random
print(random.randint(1, 1000)) # 指定された範囲(1から1000)の間の整数を返す
data = ['spam', 'ham', 'eggs', 'foo', 'bar', 'baz']
print(random.choice(data)) # ランダムに要素を取り出す
random.shuffle(data) # 要素の順番をシャッフルする
print(data)


940
spam
['ham', 'spam', 'eggs', 'foo', 'bar', 'baz']

itertools:イテレータ生成関数


In [9]:
import itertools
for x in itertools.chain('ABC', 'DEF'): # 全体をつなげて一つのシーケンスにする
    print(x)


A
B
C
D
E
F

In [10]:
for x in itertools.combinations('ABCD', 2): # 長さ2の組み合わせを返す
    print(x)


('A', 'B')
('A', 'C')
('A', 'D')
('B', 'C')
('B', 'D')
('C', 'D')

shutil:高レベルなファイル操作


In [28]:
import shutil
shutil.copytree('src_dir', 'dst_dir') # src_dir以下のファイルをdst_dirにコピーする
shutil.rmtree('src_dir') # src_dir以下のファイルをすべて削除する

json:JSONエンコーダとデコーダ


In [12]:
import json
data = {'spam': 'SPAM', 'ham': True, 'eggs': None} # 辞書型のデータを定義
json.dumps(data) # json形式の文字列に変換する


Out[12]:
'{"spam": "SPAM", "ham": true, "eggs": null}'

Pythonをさらに強力にするサードパーティ製パッケージ

  • 下記のコマンドをターミナルで実行して、venv 環境を作成し、各種パッケージをインストールする
$ python3.6 -m venv env
$ source env/bin/activate
(env) $ pip install python-dateutil
(env) $ pip install requests
(env) $ pip install beautifulsoup4
(env) $ pip install pillow

dateutil:日時操作の強力な拡張


In [15]:
import dateutil.parser
dateutil.parser.parse("Fri Apr 14 20:34:20 UTC 2017") # 日付の文字列をdatetimeに変換


Out[15]:
datetime.datetime(2017, 4, 14, 20, 34, 20, tzinfo=tzutc())

In [16]:
dateutil.parser.parse("2017-04-14 20:34:20 JST")


Out[16]:
datetime.datetime(2017, 4, 14, 20, 34, 20, tzinfo=tzlocal())

In [17]:
dateutil.parser.parse("Apr-14-2017")


Out[17]:
datetime.datetime(2017, 4, 14, 0, 0)

Requests:わかりやすいHTTPクライアント


In [19]:
import requests

r = requests.get('http://connpass.com/api/v1/event/?keyword=python') # 指定URLにアクセス
print(r.status_code, r.headers['content-type']) # ステータス、コンテンツタイプを取得
for event in r.json()['events'][:3]: # イベントの先頭3件を取得
    print(event['title'], event['started_at']) # イベントのタイトル、日時を表示


200 text/json; charset=utf-8
【深層学習ハンズオン】Aidemy meetup vol.3(1回目/全4回)-画像識別AIを作ろう 2017-08-13T13:15:00+09:00
【未経験者向け】一緒にプログラミング始めませんか?#03 2017-08-20T10:00:00+09:00
【プログラミング未経験者向け】一緒にプログラミング始めませんか? 2017-06-25T10:00:00+09:00

BeautifulSoup 4:HTMLとXMLファイルのパーサー


In [20]:
from bs4 import BeautifulSoup
import requests
r = requests.get('http://docs.python.jp/3/library/index.html')
soup = BeautifulSoup(r.content, 'html.parser') # HTMLをパース
toctree = soup.find('div', 'toctree-wrapper') # classがtoctree-wrapperのdiv要素を取得
links = toctree.find_all('a') # aタグを全て取得
print(len(links)) # リンクの数を取得
for link in links[:3]: # 先頭3件を表示
    print(link.text)


300
1. はじめに
2. 組み込み関数
3. 組み込み定数

Pillow:画像処理ライブラリ


In [27]:
from PIL import Image
image = Image.open('sample.jpg') # 画像を読み込む
half = (image.size[0] // 2, image.size[1] // 2)
half_image = image.resize(half, Image.ANTIALIAS) # 画像を1/2に縮小
half_image.save('sample-half.jpg') # 縮小した画像を保存
rotate_image = image.transpose(Image.ROTATE_90) # 画像を90度回転
rotate_image.save('sample-rotate.png') # 回転した画像をPNG形式で保存

In [ ]: