Webフォームからのユーザー入力、CSVファイルからのデータ読み込みなど、Pythonで文字列を扱う際、「全角文字と半角文字が混在していて、うまく処理できない・・・」という問題に直面することは少なくありません。
特に、数字やアルファベット、カタカナの表記ゆれは、データクレンジングの第一歩として解決すべき重要な課題です。
そこでこの記事では、Pythonを使って全角文字と半角文字を自在に、そして簡単に相互変換する方法を、初心者にもわかりやすく解説します。
「手軽に実装したい」方向けのライブラリを使う方法と、「ライブラリを追加したくない」方向けのPython標準機能のみで実装する方法、両方を紹介するので、自分の状況に合った最適な方法を選択してください。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 657,000円 (最大約53万円の給付金が適用される) |
|
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 |
|
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ |
|
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 完全無料 |
|
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
一番簡単なのは「ライブラリmojimoji」を使う方法
「とにかく手っ取り早く、確実に変換したい」と考えているなら、mojimoji
という外部ライブラリを使うのが最もおすすめです。
インストールも簡単で、非常に直感的に使うことができます。
mojimojiのインストール
まずは、Pythonのパッケージ管理ツールであるpip
を使ってmojimoji
をインストールしましょう。
ターミナル(Windowsの場合はコマンドプロンプト)で以下のコマンドを実行するだけです。
pip install mojimoji
全角から半角への変換 (mojimoji.zen_to_han)
インストールが完了したら、早速使ってみましょう。
mojimoji.zen_to_han()
関数は、文字列に含まれる全角文字を半角に変換してくれます。
import mojimoji
# 変換したい文字列
text_zen = 'Pythonで変換。 郵便番号は123−4567です。'
# 全角から半角へ変換
text_han = mojimoji.zen_to_han(text_zen)
print(f"変換前: {text_zen}")
print(f"変換後: {text_han}")
実行結果は以下の通りです。
変換前: Pythonで変換。 郵便番号は123−4567です。
変換後: Pythonで変換。 郵便番号は123-4567です。
英数字、記号、スペース(空白)がすべて半角に変換されているのがわかりますね。
半角から全角への変換 (mojimoji.han_to_zen)
逆の変換も簡単です。
mojimoji.han_to_zen()
関数を使いましょう。
import mojimoji
# 変換したい文字列
text_han = 'Pythonでカタカナを変換します。'
# 半角から全角へ変換
text_zen = mojimoji.han_to_zen(text_han)
print(f"変換前: {text_han}")
print(f"変換後: {text_zen}")
実行結果は以下の通りです。
変換前: Pythonでカタカナを変換します。
変換後: Pythonでカタカナを変換します。
この例のように、mojimoji
は濁点・半濁点付きの半角カタカナ(例: ガ
)も、1文字の全角カタカナ(例: ガ
)に正しく変換してくれるため、非常に信頼性が高いです。
特定の文字種だけを変換する
mojimoji
の便利な点は、変換対象とする文字の種類を指定できることです。
zen_to_han
やhan_to_zen
の引数に、kana=True
, ascii=True
, digit=True
などを指定します。
kana
:カタカナを対象にするascii
:英字を対象にするdigit
:数字を対象にする
例えば、「英数字は半角のままで、カタカナだけを全角にしたい」という場合は、以下のように記述します。
import mojimoji
text = '商品Aは100円、商品Bは200円、合計サンビャク円'
# カナのみを半角から全角に変換
result = mojimoji.han_to_zen(text, kana=True, ascii=False, digit=False)
print(result)
実行結果は以下の通りです。
商品Aは100円、商品Bは200円、合計サンビャク円
ascii
とdigit
をFalse
に設定したことで、英数字は変換されず、カタカナだけが全角に変換されました。
【ライブラリ不要】Python標準機能str.translateを使う方法
「外部ライブラリは導入できない・したくない」という状況もあるでしょう。
その場合は、Pythonの標準機能だけで変換を実装することも可能です。
ここではstr.translate
メソッドを使った方法を紹介します。
str.translateの仕組み
str.translate
は、ある文字を別の文字に対応させた「変換テーブル」を元に、文字列を一括で置換するメソッドです。
この変換テーブルは、str.maketrans()
という関数を使って作成します。
全角から半角への変換(英数字)
全角の英数字を半角に変換する例を見ていきましょう。
# 変換したい文字列
text_zen = 'ABCDEFGhijklmn12345'
# 変換前後の文字を定義
zen = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
han = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
# 変換テーブルを作成
trans_table = str.maketrans(zen, han)
# 変換を実行
text_han = text_zen.translate(trans_table)
print(f"変換前: {text_zen}")
print(f"変換後: {text_han}")
実行結果は以下の通りです。
変換前: ABCDEFGhijklmn12345
変換後: ABCDEFGhijklmn12345
str.maketrans(zen, han)
によって、「A
をA
に」「B
をB
に」…という対応関係のテーブルが作られ、translate
メソッドがそのテーブルに従って置換を実行します。
半角から全角への変換(英数字)
逆の変換も、変換前後の文字列を入れ替えるだけで実現できます。
# 変換したい文字列
text_han = 'Python Program'
# 変換前後の文字を定義(先ほどと逆)
han = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
zen = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
# 変換テーブルを作成
trans_table = str.maketrans(han, zen)
# 変換を実行
text_zen = text_han.translate(trans_table)
print(f"変換前: {text_han}")
print(f"変換後: {text_zen}")
実行結果は以下の通りです。
変換前: Python Program
変換後: Python Program
このように、str.translate
を使えば、標準機能だけでも変換は可能です。
ただし、カタカナの濁点などを正確に扱おうとすると、このテーブルの定義が非常に複雑になるという側面もあります。
まとめ
今回の記事では、Pythonで全角文字と半角文字を変換する2つの方法を紹介しました。
なお、Pythonを体系的に学んだり、Pythonのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。