由于不同的字符编码,查找唯一元素的代码给出了重复的元素
Code to find unique elements gives duplicate elements due to different character-encoding
我有一个包含重复名称列表的文本文件(其中一些带有重音字母,如 é、à、î 等)
例如列表:Précilia、Maggie、Précilia
我需要编写一个代码来输出唯一名称。
但是,我的文本文件似乎对两次出现的 Précilia 中的两个重音符 é 具有不同的字符编码(我猜一个可能是 ASCII,另一个可能是 UTF-8)。因此,我的代码将两次出现的 Précilia 作为不同的唯一元素给出。您可以在下面找到我的代码:
seen = set()
with open('./Desktop/input1.txt') as infile:
with open('./Desktop/output.txt', 'w') as outfile:
for line in infile:
if line not in seen:
outfile.write(line)
seen.add(line)
预期输出:Prècilia、Maggie
实际输出和错误输出:Prècilia、Maggie、Prècilia
更新:原文件是一个非常大的文件。我需要一种方法将这两个事件视为一个事件。
所以老板建议我们使用Unicode Normalization 来替换等价的字符序列,这样任何两个等价的文本都会被简化为相同的代码点序列,称为原始文本的规范化形式或规范形式。
可以在 https://withblue.ink/2019/03/11/why-you-need-to-normalize-unicode-strings.html and https://github.com/aws/aws-cli/issues/1639
上找到更多详细信息
截至目前,我们的测试用例取得了积极的成果,希望我们的主要数据集也能适用。
我有一个包含重复名称列表的文本文件(其中一些带有重音字母,如 é、à、î 等)
例如列表:Précilia、Maggie、Précilia
我需要编写一个代码来输出唯一名称。
但是,我的文本文件似乎对两次出现的 Précilia 中的两个重音符 é 具有不同的字符编码(我猜一个可能是 ASCII,另一个可能是 UTF-8)。因此,我的代码将两次出现的 Précilia 作为不同的唯一元素给出。您可以在下面找到我的代码:
seen = set()
with open('./Desktop/input1.txt') as infile:
with open('./Desktop/output.txt', 'w') as outfile:
for line in infile:
if line not in seen:
outfile.write(line)
seen.add(line)
预期输出:Prècilia、Maggie
实际输出和错误输出:Prècilia、Maggie、Prècilia
更新:原文件是一个非常大的文件。我需要一种方法将这两个事件视为一个事件。
所以老板建议我们使用Unicode Normalization 来替换等价的字符序列,这样任何两个等价的文本都会被简化为相同的代码点序列,称为原始文本的规范化形式或规范形式。
可以在 https://withblue.ink/2019/03/11/why-you-need-to-normalize-unicode-strings.html and https://github.com/aws/aws-cli/issues/1639
上找到更多详细信息截至目前,我们的测试用例取得了积极的成果,希望我们的主要数据集也能适用。