我有一个文件,其中每一行都是一个json对象,如下所示:
{"name": "John", ...}
{...}
我试图用相同的对象创建一个新文件,但是从所有对象中删除某些属性。
当我这样做时,我得到一个UnicodeEncodeError。奇怪的是,如果我改为循环range(n)
(用n表示)并使用infile.next()
,它会按我的意愿工作。
为什么这样?如何通过迭代使它起作用infile
?我试着用dumps()
代替dump()
,但是那只会在里产生一堆空行outfile
。
with open(filename, 'r') as infile:
with open('_{}'.format(filename), 'w') as outfile:
for comment in infile:
decodedComment = json.loads(comment)
for prop in propsToRemove:
# use pop to avoid exception handling
decodedComment.pop(prop, None)
json.dump(decodedComment, outfile, ensure_ascii = False)
outfile.write('\n')
这是错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\U0001f47d' in position 1: ordinal not in range(128)
谢谢您的帮助!
您面临的问题是标准file.write()
函数(由json.dump()
函数调用)不支持unicode字符串。从错误消息中可以看出,您的字符串包含UTF字符\U0001f47d
(可能是字符EXTRATERRESTRIAL ALIEN的代码,谁知道呢?),以及其他可能的UTF字符。要处理这些字符,您可以将它们编码为ASCII编码(它们将显示为\XXXXXX
,显示在输出文件中),或者您需要使用可以处理unicode的文件编写器。
要执行第一种选择,请用以下行替换您的书写行:
json.dump(unicode(decodedComment), outfile, ensure_ascii = False)
第二个选项可能是您想要的,而一个简单的选项是使用该codecs
模块。导入它,然后将第二行更改为:
with codecs.open('_{}'.format(filename), 'w', encoding="utf-8") as outfile:
然后,您将能够以特殊形式保存特殊字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句