我通过JSON格式的urlopen查询后收到字符串:
def get_clean_text(text):
return text.translate(maketrans("!?,.;():", " ")).lower().strip()
for track in json["tracks"]:
print track["name"].lower()
get_clean_text(track["name"].lower())
对于字符串“türlich,türlich(sicher,dicker)”我得到
File "main.py", line 23, in get_clean_text
return text.translate(maketrans("!?,.;():", " ")).lower().strip()
TypeError: character mapping must return integer, None or unicode
我想将字符串格式化为“türlich türlich sicher dicker”。在
这个问题并不是一个完整的自包含的示例;我不能确定它是python2还是python3,
maketrans
来自哪里等等。我很有可能猜错了,这就是为什么您应该确保适当地标记您的问题并提供一个short, self contained, correct example。(这一点,以及其他许多人,其中一些人可能比我聪明,可能因为你的问题模棱两可而忽略了你的问题。)假设您使用的是2.x,并且您已经完成了}是unicode而不是str/bytes,那么您的问题是:
from string import *
来获得maketrans
,并且{有两种类型的转换表:老式的8位表(只是256个字符的数组)和新型的稀疏表(它只是将一个字符的序号映射到另一个字符的dict)。
str.translate
函数可以使用其中一个,但是unicode.translate
只能使用第二个函数(如果您稍微考虑一下,原因应该很明显)。在string.maketrans
函数生成老式的8位转换表。所以不能与unicode.translate
一起使用。在您可以随时编写自己的“makeunitrans”函数作为插入式替换,如下所示:
但如果你只想描绘出某些字符,你可以做一些更特殊的事情:
^{pr2}$但是,从你最后的评论来看,我不确定
translate
是否是你想要的:如果你做对了,你将把字符串格式化为“türlich türlich sicher dicker”,因为你将所有标点符号映射到空格,而不是什么都没有。在
使用新样式的翻译表,您可以将任何您想要的映射为无,这就解决了这个问题。但是您可能想退一步问一下为什么首先使用
translate
方法,而不是多次调用replace
(人们通常说“为了性能”,但是如果这是一个问题,那么您不会每次都在线构建翻译表)或使用一个普通的正则表达式。在相关问题 更多 >
编程相关推荐