如何逃避特殊的char

时间:2013-04-14 00:30:18

标签: python character-encoding python-3.x ascii

我得到以下代码来处理中文字符问题,或者powerpoint文件中的一些特殊字符,因为我想使用ppt的内容作为文件名进行保存。 如果它包含一些特殊字符,它将抛出一些异常,因此我使用以下代码来处理它。

它在Python 2.7下工作正常,但是当我使用Python 3.0运行时,它给出了以下错误:

    if not (char in '<>:"/\|?*'):
TypeError: 'in <string>' requires string as left operand, not int

我用Google搜索了错误消息,但我不明白如何解决它。我知道代码if not (char in '<>:"/\|?*'):是将字符转换为ASCII码号,对吗?

是否有任何示例可以解决我在Python 3中的问题?

def rm_invalid_char(self,str):

    final=""
    dosnames=['CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9']
    for char in str:
        if not (char in '<>:"/\|?*'):
            if ord(char)>31:
                final+=char
        if final in dosnames:
            #oh dear...
            raise SystemError('final string is a DOS name!')
        elif final.replace('.', '')=='':
            print ('final string is all periods!')
            pass
    return final

3 个答案:

答案 0 :(得分:1)

简单:使用此

re.escape(YourStringHere)

来自文档:

  

返回字符串,所有非字母数字反向;这很有用   如果你想匹配可能有常规的任意文字字符串   表达元字符。

答案 1 :(得分:0)

我很好奇为什么“str”中的某些东西就像整数一样 - 输入会发生奇怪的事情。

但是,我怀疑你是否:

  • str值的名称更改为其他值,例如char_string
  • for char in char_string强迫你输入任何字符串之后

然后你解决的问题就会解决。

您可能还会考虑在生成的文件名末尾添加一个随机位,这样您就不必担心与DOS保留名称发生冲突。

答案 2 :(得分:0)

您正在传递一个迭代,其第一个元素是整数(232)到rm_invalid_char()。问题不在于此功能,而在于调用者。

有些调试是有序的:在rm_invalid_char()的开头,你应该print(repr(str)):你不会看到字符串,这与rm_invalid_char()的预期相反。您必须通过在调用 rm_invalid_char()之前调整代码来解决此问题,直至看到您期望的字符串。

问题可能是由于Python 2和Python 3如何处理字符串(在Python 2中,str对象是字节串,而在Python 3中,它们是字符串)。