0

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

它在 Python 2.7 下运行良好,但是当我使用 Python 3.0 运行时,它给了我以下错误:

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

我用谷歌搜索了错误消息,但我不明白如何解决它。我知道代码 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
4

3 回答 3

1

简单:使用这个

re.escape(YourStringHere)

从文档:

返回所有非字母数字反斜杠的字符串;如果您想匹配其中可能包含正则表达式元字符的任意文字字符串,这很有用。

于 2013-04-14T00:33:05.003 回答
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 中,它们是字符串)。

于 2013-04-14T04:32:28.670 回答
0

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

但是,我怀疑您是否:

  • 将您的值的名称更改为str其他名称,例如char_string
  • for char in char_string强制将您的输入输入到字符串之后

那么您描述的问题将得到解决。

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

于 2013-04-14T04:21:10.117 回答