Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

Pythonのよく使うコードスニペット

はじめに

Pythonのよく使うコードスニペットを残しておく。

配列

配列の定義

data = ['a', 'b', 'c']

要素の追加

data = [ ... ]
data.append(100)

要素のインデックスの取得

data = [ ... ]
index = data.index(100)  # may raise ValueError

繰り返し

data = [ ... ]
for item in data:
    pass

繰り返し(インデックスあり)

data = [ ... ]
for index, item in enumerate(data):
    pass

ディクショナリ

ディクショナリの定義

data = {'a': 1, 'b': 2, 'c': 3}

キーでソート

data = { ... }
sorted_data = dict(sorted(data.items(), key=lambda item: item[0]))

繰り返し (キー)

data = { ... }
for key in data.keys():
    pass

繰り返し (値)

data = { ... }
for value, value in data.values():
    pass

繰り返し (キーと値)

data = { ... }
for key, value in data.items():
    pass

クラス

クラス定義の雛形

class MyClass:
    def __init__(self, data):
        self.data = data

    def my_method(self):
        return self.data

継承

class BaseClass:
    def __init__(self, data):
        self.data = data

class MyClass(BaseClass):
    def __init__(self, data, exstra_data):
        super().__init__(data)
        self.exstra_data = exstra_data

ヒアドキュメント

普通のヒアドキュメント

data = '''abc
def
ghi'''

可読性を意識したヒアドキュメント

末尾の[1:-1]で前後の余分な空行を削除している。

data = '''
abc
def
ghi
'''[1:-1]

URL

URLの構築 (普通のタプルを利用)

import urllib.parse

parts = (
    'http',
    'localhost:8080',
    '/foo/bar',
    '',
    urllib.parse.urlencode({'a b': 'c&b', 'e/f': 'g?h'}),
    'zz'
)

url = urllib.parse.urlunparse(parts)

print(url)  # http://localhost:8080/foo/bar?a+b=c%26b&e%2Ff=g%3Fh#zz

URLの構築 (辞書から変換した名前付きタプルを利用)

記述量は多いが「タプルの何番目の要素が何だっけ」と迷わずにすむ。

import urllib.parse
import collections

parts = {
    'scheme': 'http',
    'netloc': 'localhost:8080',
    'path': '/foo/bar',
    'params': '',
    'query': urllib.parse.urlencode({'a b': 'c&b', 'e/f': 'g?h'}),
    'fragment': 'zz'
}

url = urllib.parse.urlunparse(collections.namedtuple('_', parts.keys())(**parts))

print(url)  # http://localhost:8080/foo/bar?a+b=c%26b&e%2Ff=g%3Fh#zz

URLエンコーディング

ワンライナーで標準入力をエンコード

以下は標準入力からa&bを読み込んでエンコードする例。

$ echo -n "a&b" | python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))"
a%26b

ワンライナーで標準入力をデコード

以下は標準入力からa%26bを読み込んでデコードする例。

$ echo -n "a%26b" | python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.stdin.read()))"
a&b

ワンライナーで引数をエンコード

以下は引数a&bエンコードする例。

$ python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "a&b"
a%26b

ワンライナーで引数をデコード

以下は引数a%26bをデコードする例。

$ python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.argv[1]))" "a%26b"
a&b

参考