私は .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))