我得到以下代码来处理中文字符问题,或者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
答案 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中,它们是字符串)。