Python 字符串格式化,%格式符,大家举例看看,请简述Python中格式化字符串的几种方式
我们知道,python中的字符串分普通字符串和采用双字节对字符进行编码字符串,一般从数据库中读取的字符串会自动被转换为采用双字节对字符进行编码字符串
下面回到重点,使用json.dumps时,一般的用法为:
obj={name :测试}
json.dumps(obj)
{name: \\u6d4b\\u8bd5}
打印json.dumps(obj)
{name: \u6d4b\u8bd5}
转储(obj).编码(“utf-8”)
{name: \\u6d4b\\u8bd5}
可以看到这里输出的字符串为普通字符串,但是里面的内容却是采用双字节对字符进行编码字符串的内容,即使对结果进行编码( utf-8 ),因为这个字符串本身就已经编码过了,所有进行编码不会有变化
要想得到字符串的真实表示,需要用到参数确保_ascii=False(默认为真实):
json.dumps(obj,确保_ascii=False)
{ name : \ xe6 \ xb5 \ x8b \ xe8 \ xaf \ x95 }
打印json.dumps(obj,确保_ascii=False)
{ 姓名: 测试}
坑:试试下面的用法(比如键是从数据库中读取的,则会以采用双字节对字符进行编码字符串形式存在):
key=uname
obj={key:测试}
json.dumps(obj,确保_ascii=False)
回溯(最近一次呼叫):
文件""中的第一行
file /usr/lib 64/python 2.6/JSON/_ _ init _ _ .py ,第237行,在转储
* *千瓦)。编码(对象)
文件/usr/lib64/python 2.6/JSON/encoder。py ,第368行,编码中
返回""。连接(块)
UnicodeDecodeError错误:" ascii "编解码器无法解码位置一中的字节0xe6:序号不在范围内(128)
这是因为键和价值不能以混合普通字符串和采用双字节对字符进行编码字符串的形式存在
改成下面则正常了(同时为普通字符串或同时为采用双字节对字符进行编码字符串):
key=uname
obj={key:u 测试}
json.dumps(obj,确保_ascii=False)
u{name: \u6d4b\u8bd5}
obj={key.encode(utf-8):u 测试。编码( utf-8)}
json.dumps(obj,确保_ascii=False)
{ name : \ xe6 \ xb5 \ x8b \ xe8 \ xaf \ x95 }
另外说说还有一个参数系统默认值
考虑下面的场景:
类别数据:
.def __init__(self):
.self.name=
.self.detail=
.
数据=数据()
data.name=名字
data.detail=细节
obj={data:data}
json.dumps(obj,确保_ascii=False)
会报下面的异常:
回溯(最近一次呼叫):
文件""中的第一行
file /usr/lib 64/python 2.6/JSON/_ _ init _ _ .py ,第237行,在转储
* *千瓦)。编码(对象)
文件/usr/lib64/python 2.6/JSON/encoder。py ,第367行,编码中
chunks=list(self.iterencode(o))
文件/usr/lib64/python 2.6/JSON/encoder。py ,第309行,in _iterencode
自我中的大块. iterencode_dict(o,markers):
文件/usr/lib64/python 2.6/JSON/encoder。py ,第275行,in _iterencode_dict
自我中的大块. iterencode(值,标记):
文件/usr/lib64/python 2.6/JSON/encoder。py ,第317行,in _iterencode
自我中的大块. iterencode_default(o,markers):
文件/usr/lib64/python 2.6/JSON/encoder。py ,第323行,in _iterencode_default
newobj=self.default(o)
默认情况下,文件"/usr/lib 64/python 2.6/JSON/encoder。py”,第344行
引发TypeError(repr(o)"不是数据可序列化的")
类型错误:__main__ .处的数据实例不是数据可序列化的
这是因为json.dumps不知道如何对数据对象进行序列化,需要定义一个函数,并赋给参数默认值:
def convert_to_builtin_type(obj):
.d={}
.d。更新(obj .__字典_ _)
.返回d
.
json.dumps(obj,ensure _ ascii=False,default=convert _ to _ builtin _ type)
{ data :{ name : \ xe5 \ x90 \ x8d \ xe5 \ xad \ x97 , detail : \ xe7 \ xbb \ x86 \ xe8 \ x8a \ x82 } }
打印json.dumps(obj,ensure _ ascii=False,default=convert _ to _ builtin _ type)
{ 数据:{ 名称: 名字,详细信息: 细节}}
def convert_to_builtin_type(obj):
d={}
d。更新(obj .__字典_ _)
返回d
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。