首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何删除非ASCII字符,但保留句点和空格?

如何删除非ASCII字符,但保留句点和空格?
EN

Stack Overflow用户
提问于 2012-01-01 02:23:45
回答 4查看 211.8K关注 0票数 121

我正在处理一个.txt文件。我想从文件中没有非ASCII字符的文本字符串。但是,我想留下空格和句号。目前,我也在剥离它们。代码如下:

代码语言:javascript
复制
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()来保留空格和句号?我想这不是太复杂,但我想不出来。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-01 02:29:33

您可以使用string.printable过滤字符串中不可打印的所有字符,如下所示:

代码语言:javascript
复制
>>> 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包含:

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

编辑:在Python 3上,filter将返回一个iterable。获取回字符串的正确方法是:

代码语言:javascript
复制
''.join(filter(lambda x: x in printable, s))
票数 213
EN

Stack Overflow用户

发布于 2016-02-23 22:14:14

根据@artfulrobot的说法,这应该比filter和lambda更快:

代码语言:javascript
复制
import re
re.sub(r'[^\x00-\x7f]',r'', your-non-ascii-string) 

在这里查看更多示例Replace non-ASCII characters with a single space

票数 34
EN

Stack Overflow用户

发布于 2017-09-15 02:27:52

使用流利的Python (Ramalho) -强烈推荐。受第2章启发的列表理解单行者:

代码语言:javascript
复制
onlyascii = ''.join([s for s in data if ord(s) < 127])
onlymatch = ''.join([s for s in data if s in
              'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8689795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档