Python School 2.0.0 documentation

Tips

«  モジュールのインポート方法いろいろ   ::   Contents

Tips

モジュールの実行

いくつかの Python の標準モジュールは -m オプションを指定して実行できます。 ちょっとした便利機能を提供してくれますので、覚えておきましょう。

JSON の整形

一般的に、Web サービスが出力する JSON は空白や改行などを含まないため、 コード例としてドキュメントに載せるには適していません。 いくつかのビューアーもありますし、 jq を使うことが便利ではありますが、 Python のモジュールを利用して整形することも可能です。

json.tool というモジュールは実行可能形式になっており、 Python インタープリタの -m オプションに指定すると実行できます。

$ echo "[1, \"a\"]" | python -m json.tool
[
    1,
    "a"
]

jq を使う場合と一緒ですね。(こちらの方が短いですが)

$ echo "[1, \"a\"]" | jq '.'
[
    1,
    "a"
]

HTTP サーバの起動

http.server モジュールで HTTP サーバーを実行できます。 アドホックなネットワーク環境でファイルを交換する場合や、 JavaScript を使った簡単な Web ページを実装する場合には便利です。 カレントディレクトリが公開されます。 デフォルトのポート番号は8000番ですが、引数で任意のポート番号を指定できます。

$ python3 -m http.server

なお、Python 2 系では SimpleHTTPServer というモジュールでした。 ブログ記事などを読む場合は気をつけましょう。

$ python -m SimpleHTTPServer

日本語を扱うときに便利なこと

JSON に含まれる日本語をエスケープさせない

コード例などは日本語で読めるようになっているとコミュニケーションロスを防げることがあります。 JSON を書き出すときにいくつかのオプションを指定すると実現できますので、確認しておきましょう。

json-dump.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json

data = {"results":[
  {
    "name": "国立霞ヶ丘競技場",
    "latitude": 139.714941,
    "longitude": 35.678160,
    "description": "naash.go.jp"
  },
  {
    "name": "味の素スタジアム",
    "latitude": 139.5272,
    "longitude": 35.6646,
    "description": "http://www.ajinomotostadium.com/\n" +
                   "元の名称: 東京スタジアム"
  }
]}
with open('out.json', 'w', encoding='utf-8') as writer:
    json.dump(data, writer, indent=4, sort_keys=True, ensure_ascii=False)
print('Wrote to "out.json".')

実行結果

$ python json-dump.py
Wrote to "out.json".
$ cat out.json
{
    "results": [
        {
            "description": "naash.go.jp",
            "latitude": 139.714941,
            "longitude": 35.67816,
            "name": "国立霞ヶ丘競技場"
        },
        {
            "description": "http://www.ajinomotostadium.com/\n元の名称: 東京スタジアム",
            "latitude": 139.5272,
            "longitude": 35.6646,
            "name": "味の素スタジアム"
        }
    ]
}

Python 2.x 系ではこちらの記事を参考にしてください。

«  モジュールのインポート方法いろいろ   ::   Contents