【问题标题】:python unidecode - how to usepython unidecode - 如何使用
【发布时间】:2018-02-10 22:41:40
【问题描述】:

使用 python,考虑到包含非 ascii 字符的 string = "Tiësto & Sevenn - BOOM (Artelax Remix)",我如何使用 unidecode 来修复字符串,从而去除非 ascii 字符?

string = random.choice(list(open('data.csv'))).rstrip()
print "[+] Starting search for:", string

artistname = string.rsplit(' - ', 1)[0]
songname = string.rsplit(' - ', 1)[1]

上面的片段给了我: 艺术家姓名 = Tiësto & Sevenn 歌曲名 = BOOM (Artelax Remix)

如您所见,艺术家名称仍然包含非 ASCII 字符。如何使用 unidecode 解决此问题?

【问题讨论】:

  • 你读过usage examples吗?你有没有any试图弄清楚如何使用unidecode?​​span>
  • 到目前为止你尝试过什么?您是要删除它们还是替换它们?在您的示例中,您想要"Tiesto & Sevenn""Tisto & Sevenn" 还是其他?
  • 是的。我试过 unidecode(u'string')。我希望将 ë 字符更改为 e,而不是将其全部删除。
  • unidecode 就是这样做的。

标签: python non-ascii-characters


【解决方案1】:

只需在您的字符串上调用unidecode未引用):

>>> from unidecode import unidecode
>>> unidecode(string)
'Tiesto & Sevenn - BOOM (Artelax Remix)'

在规范化为分解形式后,还有更长/更慢的删除组合字符的方法:

>>> import unicodedata
>>> ''.join(s for s in unicodedata.normalize('NFD', string) if not unicodedata.combining(s))
'Tiesto & Sevenn - BOOM (Artelax Remix)'

【讨论】:

  • unidecode(string) --- 这会引发异常或警告,因为我的 data.csv 文件中的某些字符串可以使用,不需要通过 unidecode 进行转换。 /usr/lib64/python2.7/site-packages/unidecode/__init__.py:46:RuntimeWarning:参数 不是 unicode 对象。传递编码字符串可能会产生意想不到的结果。清理我的 data.csv 转换文件中的所有非 ascii 字符与我拉出字符串时是否更有意义?
  • @god:在清理数据之前,您需要实际读取数据作为 unicode。使用codecs.open,并指定正确的编码。
猜你喜欢
  • 1970-01-01
  • 2018-07-05
  • 2014-02-25
  • 2017-11-16
  • 2013-06-18
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
相关资源
最近更新 更多