知ってるようで知らないPythonの特殊コーデック

  • 54
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

Pythonの文字列オブジェクトには、文字列を特定のコーデックでエンコード/デコード操作が可能ですが、その中で今まであまり知らなかったコーデックを紹介します。

base64

これはご存知の方が多いかと思いますが、文字列を Base64 文字列にエンコード/デコードします。

>>> "hello".encode("base64")
'aGVsbG8=\n'

zip

このコーデックは、文字列を Zlib モジュールでCompressした場合と同じバイト列を返します。

>>> "hello".encode("zip")
'x\x9c\xcbH\xcd\xc9\xc9\x07\x00\x06,\x02\x15'
>>> import zlib
>>> zlib.compress("hello")
'x\x9c\xcbH\xcd\xc9\xc9\x07\x00\x06,\x02\x15' #同じ

hex

このコーデックは、文字列をバイトあたり2桁の16進数に変換します。

>>> "hello".encode("hex")
'68656c6c6f'

bz2

このコーデックは、文字列をbz2を使って圧縮します。

>>> "hello".encode("bz2")
'BZh91AY&SY\x191e=\x00\x00\x00\x81\x00\x02D\xa0\x00!\x9ah3M\x073\x8b\xb9"\x9c(H\x0c\x98\xb2\x9e\x80'

rot13

このコーデックは、シーザー暗号を使って文字列を暗号化します。

>>> "hello".encode("rot_13")
'uryyb'

uu

このコーデックは、uuencodeを使って文字列を変換します。

>>> print "hello".encode("uu")
begin 666 <data>
%:&5L;&\ 

end

idna

このコーデックは、 Unicode文字列 を、RFC3490で規定している、漢字などで入力されたドメイン名を、アプリケーション上でASCII形式で記述した文字列に変換するコーデックです。

>>> u"ハロー".encode("idna")
'xn--mdk0c0b'

Pythonには、これ以上の特殊コーデックがありますが、あまり日常的には使用しないものなので、これらのコーデックのみ紹介しました。 zip とか bz2 とかは、モジュールを使用しなくても文字列を圧縮することができるので、大変便利ですよね。