Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据集中unicode的规范化_Python_Unicode_Normalize - Fatal编程技术网

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)