如何在python

时间:2016-03-17 14:11:23

标签: python maya

我正在使用Maya中的工具,在某些时候,用户可以在textField上输入注释。此注释稍后将用作将要保存的文件名的一部分。 我在法国工作,因此用户可能会使用一些突出的字符作为“é”或“à” 我喜欢的只是将它们翻译成非突出的相应角色。但是我意识到这非常棘手,所以我可以通过juste检测它们,这样我就可以向用户发出警告信息了。我不想只是删除这些有罪的信件,因为这可能导致评论无法解释 我知道他们在这里有一些类似的问题,但他们都是我不了解/不懂的其他语言(例如C ++或php)。

以下是我到目前为止在网络上发现的内容:

import re
comment = 'something written with some french words and numbers'
if re.match(r'^[A-Za-z0-9_]+$', text):
    # issue a warning for the user

这个第一个解决方案不起作用,因为它认为强调的字符是可接受的。

我发现了这个:

ENGLISH_CHARS = re.compile('[^\W_]', re.IGNORECASE)
ALL_CHARS = re.compile('[^\W_]', re.IGNORECASE | re.UNICODE)

assert len(ENGLISH_CHARS.findall('_àÖÎ_')) == 0
assert len(ALL_CHARS.findall('_àÖÎ_')) == 3

我想这样使用:

ENGLISH_CHARS = re.compile('[^\W_]', re.IGNORECASE)
if len(ENGLISH_CHARS .findall(comment)) != len(comment):
    # issue a warning for the user

但只有字符串封装在下划线中才能起作用。

如果这是我没有找到或理解的东西的副本,我真的很抱歉,但它一直让我疯狂。

2 个答案:

答案 0 :(得分:0)

unicode命令尝试以给定的编码对您的字符串进行编码。如果失败,它将默认为ASCII并引发异常。

try:
    unicode(filename)
except UnicodeDecodeError:
    show_warning()

这只允许不重音的字符,这可能是你想要的。

如果您已有Unicode字符串,则必须更改编码,这将引发UnicodeEncodeError。

filename.encode("ASCII")

示例:

>>> unicode("ää")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

答案 1 :(得分:0)

看来你实际上有两个问题。

  1. 如何发现是否需要从重音字符转换为类似的&#39;来自ASCII。

    #coding: utf-8
    import string
    text = u"Montréal, über, 12.89, Mère, Françoise, noël, 889"
    allowed_letters = string.printable
    name_has_accented = [letter for letter in text if not letter in allowed_letters]
    if name_has_accented:
        text = "".join(convert(text))
    print(text)
    
  2. 如何将它们轻松转换为非重音?你可以设计出很好的通用解决方案,或者你可以只用法语来做,很容易就是这样:

    def convert(text):
        replacements = {
            u"à": "a",
            u"Ö": "o",
            u"é": "e",
            u"ü": "u",
            u"ç": "c",
            u"ë": "e",
            u"è": "e",
        }
        def convert_letter(letter):
            try:
                return replacements[letter]
            except KeyError:
                return letter
        return [convert_letter(letter) for letter in text]