記事内にはプロモーションが含まれています

Pythonで全角・半角を変換する方法(mojimojiやtranslate)

Pythonで全角・半角を変換する方法(mojimojiやtranslate) プログラミングの疑問解決

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_hanhan_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円、合計サンビャク円

asciidigitFalseに設定したことで、英数字は変換されず、カタカナだけが全角に変換されました。

【ライブラリ不要】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に」「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のスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。

細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。

Follow me!

PAGE TOP