1. ホーム
  2. python

[解決済み] ピリオドとスペースを残して非ASCII文字を削除するにはどうすればよいですか?

2022-08-07 03:56:03

質問

私は.txtファイルを扱っています。ファイルから非ASCII文字を含まない文字列を取得したいです。しかし、スペースとピリオドは残しておきたいと考えています。現在、私はそれらも除去しています。以下はそのコードです。

def onlyascii(char):
    if ord(char) < 48 or ord(char) > 127: return ''
    else: return char

def get_my_string(file_path):
    f=open(file_path,'r')
    data=f.read()
    f.close()
    filtered_data=filter(onlyascii, data)
    filtered_data = filtered_data.lower()
    return filtered_data

スペースやピリオドを残すためにonlyascii()をどのように修正すればよいのでしょうか?あまり複雑ではないと想像しますが、私はそれを理解することができません。

どのように解決するのですか?

文字列から印刷不可能な文字を除外するには、次のようにします。 文字列.printable のようにします。

>>> s = "some\x00string. with\x15 funny characters"
>>> import string
>>> printable = set(string.printable)
>>> filter(lambda x: x in printable, s)
'somestring. with funny characters'

私のマシンではstring.printableが含まれています。

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c

EDIT: Python 3では、filterはiterableを返します。文字列を返すのが正しい方法でしょう。

''.join(filter(lambda x: x in printable, s))