非ASCII文字を削除してピリオドとスペースを残すにはどうすればいいですか? 質問する

非ASCII文字を削除してピリオドとスペースを残すにはどうすればいいですか? 質問する

私は .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() をどのように変更すればよいでしょうか? それほど複雑ではないと思いますが、わかりません。

ベストアンサー1

文字列から印刷できない文字をすべてフィルタリングするには、文字列.印刷可能、 このような:

>>> 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

編集: Python 3 では、フィルターは反復可能オブジェクトを返します。文字列を取得する正しい方法は次のとおりです。

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

おすすめ記事