Pythonを使ってデータ処理をしていて¥980のような日本語の半角¥マークを置き換えたい時(わたしの場合、¥マークのみ消したかった)があったので、その方法を2種類紹介します。
半角¥マークの文字コード番号について
日本語の半角¥マークには悩まされる事が多いです。(本ブログでも、C言語で改行を表す半角の¥nは\nと表示されていますし)
そもそも英語圏で利用されているASCIIコードのバックスラッシュ「\」が日本だと「¥」に置き換えられていることが原因です。
調べてみるとmacOSとWindowsでは、半角の¥マークの文字コード番号が違っていました。
半角¥マークの文字コード番号
Windows | 92 |
macOS | 165 |
補足するとmacOSで92番は「\」(バックスラッシュ)です。
92番はASCIIコード表にある番号なので何となく分かりますが、「165番ってどう言う事?」とわたしは思ってしまいました。なぜならASCIIコード表は0~127番までだったから。
参考
調べてみると、128番以降はギリシャ文字など各国で使う文字に置き換えて定義していった歴史があるようで、その中に165番があり「¥」となっているようなのです。
こちらの表も参考になります
ちなみにWindowsパソコンでPythonの以下のプログラムを実行すると
print(chr(92)) print(chr(165))
どちらも半角「¥」が表示されてしまいます。見た目は同じ文字なのに文字コードが違うのです。これまたややこしい。(きりがなさそうなので、これ以上は掘り下げるのはやめました!)
以下に¥マークを置き換えるPythonコードを2種類示します。
正規表現操作モジュール(re)を使って置き換え(Pythonコード)
置き換えたい文字が¥マーク以外にもある場合、あるいは先ほどの例のようにどちらのコード番号の¥マークか見た目で判断つかない場合は、こちらが便利です。
正規表現操作モジュールを利用するには、import reが必要です。
# -*- coding: utf-8 -*- import re buffer = r"価格 \980" print("元の文字列 [{0}]".format(buffer)) # 方法1 replace1 = re.sub(r"\\", "", buffer) print("\nre.subで置き換え [{0}]".format(replace1))
例として、¥1,280の文字列の「¥」と「,」を消去したい場合は、こうします。
replace1 = re.sub(r"\\|,", "", buffer)
replace関数で置き換え(Pythonコード)
replace関数を利用して¥マークの置き換えをする際は、注意が必要です。
先ほど説明したmacOSとWindowsの場合で指定する文字コード番号が変わってくるからです。
# -*- coding: utf-8 -*- buffer = r"価格 \980" print("元の文字列 [{0}]".format(buffer)) # 方法2 replace2 = buffer.replace(chr(92), "") # macOS/Linux --> chr(165) # Windows --> chr(92) print("\nreplaceで置き換え [{0}]".format(replace2))
上記のchr(92)は、Windowsの場合です。macOSで実行する場合は、chr(165)としてください。
以上、Pythonで日本語の半角¥マークを置き換える方法2種類、でした。
コメント