Pythonのunicodedataモジュールとは?Unicode文字データベースの基本と主要関数を解説
この記事では、Python 3.x(およびそれ以降のバージョン)で利用できる標準ライブラリ「unicodedata」、すなわちUnicode文字データベースについて詳しく解説します。
unicodedataモジュールは、Unicodeコンソーシアムが定義する「Unicode Character Database(UCD)」へのアクセスを提供します。すべてのUnicode文字に対して、その名前・カテゴリ・正規化形式などの豊富な情報を取得でき、文字コードを扱うプログラムにおいて非常に強力なツールとなります。モジュール内で使われる名前や記号は、Unicode標準で定義されているものと同一であるため、公式ドキュメントとの対応も分かりやすくなっています。
それでは、このモジュールでよく使われる代表的な関数をいくつか見ていきましょう。
lookup関数 – 名前から文字を取得する
lookup関数を使うと、Unicodeの正式名称を引数として渡すことで、対応する記号(文字)を取得できます。
使用例
import unicodedata
print(unicodedata.lookup('HYPHEN'))
print(unicodedata.lookup('HIGH VOLTAGE SIGN'))
print(unicodedata.lookup('NO ENTRY'))実行結果
- ⚡ ⛔
このように、人間にとって読みやすい文字名称から直接シンボルを取り出せるため、特殊記号をソースコードに埋め込みたい場合に便利です。
name関数 – 文字から名前を取得する
name関数はlookup関数とは逆に、渡した文字に対応するUnicode上の正式名称を返します。
使用例
import unicodedata print(unicodedata.name(u'&')) print(unicodedata.name(u'@')) print(unicodedata.name(u'`'))
実行結果
AMPERSAND COMMERCIAL AT GRAVE ACCENT
デバッグ時やログ出力時に「この文字は何だったのか」を確認したい場面で役立ちます。なお、名前が定義されていない文字を渡した場合はValueErrorが発生する点に注意してください。
category関数 – 文字のカテゴリを判定する
category関数を使うと、引数として渡した記号・英字・数字などが、Unicodeのどのカテゴリに分類されるかを判定できます。
使用例
import unicodedata print(unicodedata.category(u'&')) print(unicodedata.category(u'1')) print(unicodedata.category(u'a'))
実行結果
Po Nd Ll
各カテゴリの意味は次のとおりです。
- Po:Punctuation, other(その他の句読記号)
- Nd:Number, decimal digit(10進数字)
- Ll:Letter, lowercase(小文字のアルファベット)
テキスト処理や入力値のバリデーションなど、文字種別ごとに処理を分岐させたいケースで活用できます。
まとめ
この記事では、Pythonのunicodedataモジュール(Unicode文字データベース)の概要と、lookup・name・categoryという3つの主要関数の使い方を紹介しました。これらの関数を組み合わせることで、文字とその名称・分類情報を双方向に変換でき、国際化対応アプリケーションやテキスト解析の品質向上につながります。unicodedataには他にもnormalize(Unicode正規化)など便利な機能が多数用意されているので、ぜひ公式ドキュメントも併せて確認してみてください。
-
Pythonでタプル同士を除算する方法
Pythonでタプル同士の除算(要素ごとの割り算)を行いたい場合、「zip」メソッドとジェネレータ式を組み合わせるとシンプルに実現できます。zipメソッドは、複数のイテラブル(反復可能なオブジェクト)を受け取り、それらの要素を対応する位置ごとにまとめてタプルとして返す機能を持っています。一方、ジェネレータとは、イテレータを手軽に作成するための仕組みです。内部的には「__iter__()」と「__next__()」というメソッドを持つクラスが自動的に実装され、内部状態も自動的に管理されます。さらに、返せる値がなくなった時点では「StopIteration」例外を発生させることで、反復処理の終了を
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実