Python 数据集中unicode的规范化
目前我的代码如下:Python 数据集中unicode的规范化,python,unicode,normalize,Python,Unicode,Normalize,目前我的代码如下: import unicodedata unicode = open("unicode.txt").read() unicode = unicodedata.normalize('NFKC', unicode) print(unicode) 其中,unicode.txt是一个简单读取\u00e9的文本文件 当我运行程序时,输出仍然是\u00e9,但是,如果我用\u00e9替换.normalize行中的unicode,则输出是 最终目标只是将所有unicode字符串(例如.\u
import unicodedata
unicode = open("unicode.txt").read()
unicode = unicodedata.normalize('NFKC', unicode)
print(unicode)
其中,unicode.txt
是一个简单读取\u00e9
的文本文件
当我运行程序时,输出仍然是\u00e9
,但是,如果我用\u00e9
替换.normalize行中的unicode
,则输出是
最终目标只是将所有unicode字符串(例如.\u00e9)替换为其常规字符。像cafe
而不是cafe
将字符串输入函数时,normalize函数似乎可以正常工作,但当它位于要打开的文件中时,则无法正常工作。即使如此,它似乎也会返回样式化的é
,而不是常规的e
有什么方法可以让这个工作正常吗?文件的内容是六个字符:\u0029
'\u0029'
键入的代码是表示为转义码的单个Unicode代码点:
>>> print('\u00e9') # A single character escape code
é
>>> print(r'\u0039') # A six-character string using raw string notation.
\u0039 # Escape codes are ignored and characters are literal.
>>> print('\\u0039') # A six-character string using an escaped backslash
\u0039 # to indicate a literal backslash.
要将六个字符的字符串转换为一个字符,请使用以下命令:
>>> r'\u00e9'.encode('ascii').decode('unicode-escape')
'é'
将ascii字符的Unicode字符串转换为字节字符串需要使用ascii
encode,因为在Python 3中只能对字节字符串进行解码。Python 2可以跳过它,因为如果需要,它会隐式地将Unicode字符串编码回ASCII。
您还可以直接从文件中读取它(假设为Python 3),方法是:
在Python2上使用import io
和io.open
。我想您可以将其更改为readline()或readlines()。
守则是:
import unicodedata
unicode = open("unicode.txt", 'r')
for ln in unicode.readlines():
ln = unicodedata.normalize('NFKC', ln)
print(ln)
原因是read()将分别处理文件中的每个字符,这意味着迭代将针对每个字符进行。同时,readline或readlines()将处理一行或整行的迭代
但是,unicodedata尝试规范化字符串中的unicode,而不是按字符。希望这会有所帮助
参考资料:
我不太确定:您想要哪种转换?a) \u00e9
→ <代码>é
,b)é
→ <代码>e,c)\u00e9
→ <代码>e?马克的回答有助于你解决问题。转换b)称为音译(非标准化),而unidecode
包可以帮助您。对于c),组合a)和b)。
import unicodedata
unicode = open("unicode.txt", 'r')
for ln in unicode.readlines():
ln = unicodedata.normalize('NFKC', ln)
print(ln)