Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Python 半角の記号を削除したい

やりたいこと

  • 文字列の中に含まれる以下の記号を削除したい
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

確認環境

  • python3.6
  • CentOS7

方法

>>> import string
>>> text = 'Abcd1!EfgH"#$%2s&\'I()j*5k+,-./:l;MMM<=>NNN?@[\Z]^_`{99|00}7~8'
>>> result = text.translate(str.maketrans( '', '',string.punctuation))
>>> print(result)
Abcd1EfgH2sIj5klMMMNNNZ990078

解説

  • 分解して記載してみる
>>> import string
>>> text = 'Abcd1!EfgH"#$%2s&\'I()j*5k+,-./:l;MMM<=>NNN?@[\Z]^_`{99|00}7~8'
>>> kigo = string.punctuation
>>> print(kigo)
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
>>> table = str.maketrans( '', '',kigo)
>>> result = text.translate(table)
>>> print(result)
Abcd1EfgH2sIj5klMMMNNNZ990078
  • 1~4行目
  • 記号を含む文字列定数 string.punctuation を利用する
>>> import string
>>> kigo = string.punctuation
>>> print(kigo)
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
  • 6行目
  • 文字変換の為の translate() 用変換テーブルを作成
>>> table = str.maketrans( '', '',kigo)
# 第3引数に指定した文字を削除する
  • 7行目
  • 変換テーブルを使い、対象テキストを変換(対象文字を削除)
>>> result = text.translate(table)
  • 8行目
  • 結果の確認
>>> print(result)
Abcd1EfgH2sIj5klMMMNNNZ990078

使用例

  • 日時ISOフォーマットから数値のみ抽出
>>> from datetime import datetime
>>> d = datetime.now().isoformat()
>>>
>>> print(d)
2019-12-03T19:03:16.015300
>>> 
>>> dnum = d.translate(str.maketrans( '', '',string.punctuation + 'T'))
>>> print(dnum)
20191203190316015300
  • 消したい記号を絞るなど
>>> table = str.maketrans( '', '', '()<>[]{}')

その他、参考情報

  • 文字列定数は以下のようにstring.punctuation以外にも多数ある

  • 小文字

>>> print(string.ascii_lowercase)
abcdefghijklmnopqrstuvwxyz
  • 大文字
>>> print(string.ascii_uppercase)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • 数値
>>> print(string.digits)
0123456789
  • 印刷可能文字 ※空白も含まれるので注意
>>> print(string.printable)
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~



>>>
  • 空白
print(string.whitespace)

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?