我无法弄清楚这个错误是什么以及我该如何修复它。
texts = [[word for word in document.translate(trans_table).lower().split()] for document in live_text]
TypeError: character mapping must return integer, None or unicode
我的代码:
rows=cursor.fetchall()
listTSeps=[]
for row in rows:
listTSeps.append(re.sub('[^A-Za-z0-9]+', ' ', row[0]))
#Close cursor and connection done reading from database
cursor.close()
conn.close()
live_text=listTSeps
trans_table = ''.join( [chr(i) for i in range(128)] + [' '] * 128 )
texts = [[word for word in document.translate(trans_table).lower().split()] for document in live_text]
text_matrix = ["None"]*len(live_text)
我通过网络搜索得出结论,这可以使用.encode('ascii')或ord()来解决。
我是python的业余爱好者并试图从示例代码中学习。我是从朋友那里得到的。请有人能够解释问题的根源以及如何解决问题。感谢。
答案 0 :(得分:1)
您的document
是unicode
,而不是str
。对于unicode
,translate()
方法需要是不同的,而不是256个字符的字符串。
help(u' '.translate)
的产率:
Help on built-in function translate:
translate(...)
S.translate(table) -> unicode
Return a copy of the string S, where all characters have been mapped
through the given translation table, which must be a mapping of
Unicode ordinals to Unicode ordinals, Unicode strings or None.
Unmapped characters are left untouched. Characters mapped to None
are deleted.
这样的字典很好:
u'abcd efgh'.translate({ 32: u'x' })
u'abcdxefgh'
对于您只想用空格替换ASCII 127以上的所有字符的情况,您可能需要考虑这一点:
re.sub(r'[^\x00-\x7f]', ' ', u'abcdäefgh')
u'abcd efgh'