我有一个JSON文件,用于存储名为stream_key.json
的文本数据:
{"text":"RT @WBali: Ideas for easter? Digging in with Seminyak\u2019s best beachfront view? \nRSVP: b&f.wbali@whotels.com https:\/\/t.co\/fRoAanOkyC"}
正如我们可以看到json文件中的文本包含unicode \u2019
,我想在Python 2.7中使用regex删除此代码,这是我目前为止的代码(eraseunicode.py):
import re
import json
def removeunicode(text):
text = re.sub(r'\\[u]\S\S\S\S[s]', "", text)
text = re.sub(r'\\[u]\S\S\S\S', "", text)
return text
with open('stream_key.json', 'r') as f:
for line in f:
tweet = json.loads(line)
text = tweet['text']
text = removeunicode(text)
print(text)
我得到的结果是:
Traceback (most recent call last):
File "eraseunicode.py", line 17, in <module>
print(text)
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 53: character maps to <undefined>
由于我已经使用函数在打印前删除\u2019
,我不明白为什么它仍然是错误。请帮忙。感谢
答案 0 :(得分:1)
当数据在文本文件中时,\u2019
是一个字符串。但是一旦加载到json
,它就变成了unicode,替换不再起作用了。
所以你必须在加载到json之前应用正则表达式并且它可以正常工作
tweet = json.loads(removeunicode(line))
当然它处理整个原始线。你也可以通过检查这样的字符代码从解码的text
中删除非ascii字符(注意它不是严格等同的):
text = "".join([x for x in tweet['text'] if ord(x)<128])