我有一个网络抓取工具,可以处理论坛问题,将它们分成单个单词并将其写入文本文件。单词存储在元组列表中。每个元组包含单词及其频率。像这样......
[(u'move', 3), (u'exploration', 4), (u'prediction', 21),
(u'find', 5), (u'user', 2), (u'interface', 2), (u'pleasant', 2),
(u'am', 11), (u'puzzled', 2), (u'find', 5), (u'way', 5),
(u'prediction', 21), (u'mode', 2), (u'have', 21),
(u'explored', 2), (u'file', 9), (u'Can', 7), (u'help', 6),
(u'Possible', 1), (u'bug', 2), (u'data', 31), (u'is', 17)
然而,论坛上的某些人使用了字符\ u200b,它破坏了我的所有代码,因为该字符不再是Unicode空格。
(u'used\u200b', 1)
将其打印出来不会产生错误,但写入文本文件会产生错误。我发现string.strip()
和string.replace()
没有帮助,所以我想知道如何使用正则表达式库来摆脱那个角色。我计划解析整个元组列表以找到它。
答案 0 :(得分:7)
我用python 2.7测试过。 replace
按预期工作:
>>> u'used\u200b'.replace(u'\u200b', '*')
u'used*'
以及strip:
>>> u'used\u200b'.strip(u'\u200b')
u'used'
请记住,这些函数的参数必须是Unicode文字。它应该是u'\u200b'
,而不是'\u200b'
。请注意开头的u
。
实际上,将该字符写入文件就可以了。
>>> import codecs
>>> f = codecs.open('a.txt', encoding='utf-8', mode='w')
>>> f.write(u'used\u200bZero')
参见资源:
答案 1 :(得分:-1)
在我的情况下,您可以打开文件C:\ Users \ SOMEN \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ encodings * cp1252.py *,但这应该是一样。
decoding_table = (
'\x00' # 0x00 -> NULL
'\x01' # 0x01 -> START OF HEADING
'\x02' # 0x02 -> START OF TEXT
'\x03' # 0x03 -> END OF TEXT
'\x04' # 0x04 -> END OF TRANSMISSION
'\x05' # 0x05 -> ENQUIRY
'\x06' # 0x06 -> ACKNOWLEDGE
'\x07' # 0x07 -> BELL
'\x08' # 0x08 -> BACKSPACE
'\t' # 0x09 -> HORIZONTAL TABULATION
'\n' # 0x0A -> LINE FEED
'\x0b' # 0x0B -> VERTICAL TABULATION
'\x0c' # 0x0C -> FORM FEED
'\r' # 0x0D -> CARRIAGE RETURN
'\x0e' # 0x0E -> SHIFT OUT
'\x0f' # 0x0F -> SHIFT IN
'\x10' # 0x10 -> DATA LINK ESCAPE
'\x11' # 0x11 -> DE
#add the character code here
'\u200b' #add this in the file and save it.