删除奇怪的ANSI字符并使用Python转换重音符号

2024-10-01 15:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我用twitterapi下载了很多西班牙语tweets,但是其中有些有一些奇怪的ANSI字符,我不想看到这些字符。我有大约18000个文件,我想删除这些字符。我所有的文件都被编码成UTF-8。 例如:

b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.'

如果我们要删除大量的西班牙语版本的重音字符。这是因为在那之后,我正在做一些文本挖掘分析,我想统一单词,因为可能有人不使用重音符号。 我认为b意味着处于字节模式。在

在前面的例子中,如果我在python中输入以下内容:

^{pr2}$

我在候机厅看到这个:

Me quedo con una frase de nuestra reunión de hoy con @Colegas

我不喜欢,因为它不是西班牙语中常用的口音。应该有个性。我不明白为什么也不明白。 我还希望文件开头的b消失。 为了对文件进行编码,我使用了以下方法:

f.write(str(FILE.encode('utf-8','strict')))

在那里,我从UTF-8中的json创建文件,其中包含每个tweet的很多键。也许我应该改变它,或者我做错了什么。在

在某些情况下,尝试在python终端中获取字符时也会遇到问题。例如:

print(u'\uD83D\uDC1F')

我认为这是因为python不能表示这些字符(在上面的例子中)。是这样吗?我还想删除它们。在

抱歉,如果有一些英语错误,请随时询问是否有什么不清楚。在

提前谢谢。在

编辑:我使用的是python3.4


Tags: 文件编码de字符conutf例子me
3条回答

首先:你需要百分之百确定twitter中这些字符是用什么语言编码的。如果您确定它是ANSI(通常西班牙语编码语言是拉丁语-1),那么您从twitter获得的所有信息都需要使用此函数

a = getStufFromTwitter() #you parse twitter 
myStr = a.encode('Latin-1') 

encode('ANSI')将告诉python您从外部获取的所有内容都是用ANSI编写的,他应该用Unicode进行转换。在

然后,每当你想在程序的任何部分重用myStr(尤其是你想把它写在某个地方的话),你就必须使用decode函数。你的情况是:

^{pr2}$

这应该行得通。不过,如果我们能看到很多代码的话,帮助你会更容易。在Python中有一些非常恶毒的规范(您使用python2.7吗?如果是,请在每个脚本的开头添加以下内容:

^{3}$

再一次,这是python中一个非常棘手的部分。在

你在搅拌苹果和橘子。b'reuni\xc3\xb3n'是{}的UTF-8编码,当然是人类可读格式的reunión。在

>>> print b'reuni\xc3\xb3n'.decode('utf-8')
reunión
>>> repr(b'reuni\xc3\xb3n'.decode('utf-8'))
"u'reuni\\xf3n'"

这里没有“ANSI”(无论如何,它是一个误用词;通常用于指Windows字符编码,但不一定是您所期望的那种)。在

至于如何从重音字符中删除重音符号,简短的版本是规范化为Unicode“NFD”表示,然后丢弃任何具有“音调符号”分类的代码点。例如,在What is the best way to remove accents in a Python unicode string?中,为了使这个答案自足,这里是这个问题的答案之一的要点,但是一定要阅读所有答案,如果只是为了决定哪个最适合你的用例的话。在

^{pr2}$

python3中处理传入文本的模式之一(以bytes的形式)是在接收到文本时立即对其进行解码。在

所以你可以从twitter上得到信息

In [1]: tweetbytes = b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.'

你也这么做了

^{pr2}$

记住缩略词battie;字节被解码,文本被编码。在

现在它是文本

^{3}$

你可以这样使用它

In [4]: print(tweet)
Me quedo con una frase de nuestra reunión de hoy.

相关问题 更多 >

    热门问题