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

11 浏览
0 Comments

如何去除非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()函数来保留空格和句号?我想这不是太复杂,但我无法想出解决方法。

0
0 Comments

文章标题:如何去除非ASCII字符但保留句点和空格?

问题原因:问题的提出者想要去除字符串中的非ASCII字符,但同时又希望保留句点和空格。

解决方法:根据给出的解决方案,可以使用正则表达式的sub方法来实现。具体代码如下:

import re
re.sub(r'[^\x00-\x7f]',r'', your-non-ascii-string)

该方法可以在不使用filter和lambda函数的情况下更快地完成字符替换操作。更多示例可以在这里找到。

需要注意的是,这个解决方案只能满足问题提出者的要求,但不能移除包含在ASCII中的非打印字符,这可能是问题提出者实际想要问的。

0
0 Comments

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

原因:用户想要删除字符串中的非ASCII字符,但是句点和空格需要保留。用户已经尝试了使用string.printable过滤字符的方法,但出现了一些问题。

解决方法:用户可以使用以下方法来过滤掉不可打印的字符:

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

在这个例子中,用户定义了一个字符串s,其中包含一些非ASCII字符。然后,用户导入了string模块,并使用string.printable创建了一个可打印字符的集合printable。用户使用filter函数和lambda表达式来过滤掉s中不在printable集合中的字符。

然而,在Python 3中,filter函数返回一个可迭代对象,而不是字符串。所以,用户需要使用''.join()方法来将过滤后的字符重新组合成字符串。

除了使用filter函数,用户还可以尝试使用正则表达式来过滤非ASCII字符:

import re
re.sub(r'[^\x00-\x7f]',r'', your-non-ascii-string)

这种方法在兼容性方面更好,并且在一些情况下可能比使用filter函数更快。

另外,用户提到在处理大文件时,使用上述方法会非常慢。对此,其他用户建议用户创建一个string.printable的集合,并重复使用该集合进行过滤。此外,建议用户将文件分成8K-512K大小的块进行处理,而不是一次性对整个文件进行过滤。

最后,有用户提到在使用filter函数时,会出现PyLint的警告。因此,用户可以使用列表推导式来替代filter函数,例如:

''.join(x for x in s if x in printable)

这种方法可能与filter函数的效果相同,但需要根据具体情况进行性能测试。

本文介绍了一种过滤字符串中非ASCII字符的方法。用户可以使用filter函数和lambda表达式,或者使用正则表达式来实现这个目标。此外,用户还可以通过创建一个字符集合,并重复使用该集合来提高处理大文件时的效率。

0
0 Comments

问题的原因是需要将非ASCII字符删除,但保留句点和空格。解决方法是使用encode()或decode()函数来更改编码方式。

在Python 2中,可以使用以下代码将Unicode字符串转换为ASCII字符串并删除非ASCII字符:

s = u'Good bye in Swedish is Hej d\xe5'
s = s.encode('ascii', errors='ignore')
print s

在Python 3中,可以使用以下代码将str类型转换为bytes类型,并删除非ASCII字符:

"Hej då".encode("ascii", errors="ignore").decode()

如果需要将str类型转换为unicode类型,并删除非ASCII字符,可以使用以下代码:

u"hej då".encode("ascii", errors="ignore").decode()

如果需要将unicode类型转换为str类型,并删除非ASCII字符,可以使用以下代码:

"hej d\xe5".decode("ascii", errors="ignore").encode()

如果在将Unicode字符放入字符串中时出现UnicodeDecodeError错误,可以尝试使用u'字符串'的格式来指定字符串。另外,需要注意的是,在Python 2中,应先使用.decode()将字符串解码,然后再使用.encode()进行编码。

还有一种更简洁的方法是先使用.decode()解码字符串,然后再使用.encode()进行编码:

s.decode('utf-8').encode('ascii', errors='ignore')

这种方法只适用于Python 3。

总结起来,要删除非ASCII字符但保留句点和空格,可以使用encode()或decode()函数来更改编码方式,并指定errors='ignore'参数来忽略不支持的字符。对于Python 2和Python 3,具体的代码略有不同,但原理相同。

0