[python] python常用函数
urlencode与urldecode
当url中包含中文或者参数包含中文,需要对中文或者特殊字符(/、&)做编码转换。
urlencode的本质:把字符串转为gbk编码,再把\x替换成%。如果终端是utf8编码的,需要把结果再转成utf8输出,否则会乱码。
urlencode
urllib库里面的urlencode函数,可以把key-value健值对的key、value都进行urlencode并转换成a=1&b=2的字符串。
#key-value健值对 >>> from urllib import urlencode >>> data={'a':'a1','b':'中文'} >>> print urlencode(data) a=a1&b=%E4%B8%AD%E6%96%87 >>> data={'a':'a1','b测试':'中文'} >>> print urlencode(data) a=a1&b%E6%B5%8B%E8%AF%95=%E4%B8%AD%E6%96%87
urllib库里面的quote函数,可以针对单个字符串进行urlencode转换。
#string >>> from urllib import quote >>> data="测试" >>> print quote(data) %E6%B5%8B%E8%AF%95
urldecode
urllib只提供了unquote()函数。
>>> from urllib import unquote >>> unquote("%E6%B5%8B%E8%AF%95") '\xe6\xb5\x8b\xe8\xaf\x95' >>> print unquote("%E6%B5%8B%E8%AF%95") 测试 >>>
json处理
两个函数:
函数 | 描述 |
---|---|
json.dumps | 将python对象编码成JSON字符串(对象->字符串) |
json.loads | 将已经编码的json字符串解码为Python对象(字符串->对象) |
json.dumps
语法:json.dumps(data, sort_keys=True, indent=4,separators=(self.item_separator, self.key_separator))
>>> import json >>> data={"a":"a1","b":"b1"} >>> jsonstr=json.dumps(data) >>> print jsonstr {"a": "a1", "b": "b1"} #输出格式化 >>> print json.dumps(data, sort_keys=True, indent=4,separators=(",",":")) { "a":"a1", "b":"b1" } >>>
python原始类型向json类型的转换对照表:
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str,unicode | string |
int,long,float | number |
True | true |
False | false |
None | null |
json.loads
json.loads——返回Python字段的数据类型
>>> import json >>> jsonstr='{"a":"a1","b":"b1"}' >>> print json.loads(jsonstr) {u'a': u'a1', u'b': u'b1'} >>> jsonstr='{"a":"a1","b":null,"c":false,"d":{"aa":"aa1","bb":"bb1"}}' >>> print json.loads(jsonstr) {u'a': u'a1', u'c': False, u'b': None, u'd': {u'aa': u'aa1', u'bb': u'bb1'}} >>> jsonstr='[{"a":"a1"},{"b":"b2"}]' >>> print json.loads(jsonstr) [{u'a': u'a1'}, {u'b': u'b2'}]
json类型转换为python类型的对照表
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number(int) | int,long |
number(real) | float |
true | True |
false | False |
null | None |
结论:print只能输出python认识的数据类型,python.dumps才可以格式化输出。
计算字符串md5
方法一:使用md5包
import md5 def calMd5(signdata,signkey,joiner=""): signdata=signdata+joiner+""+signkey m=md5.new(signdata) sign = m.hexdigest() return sign
方法二:使用hashlib包
import hashlib def calHashMd5(signdata,signkey,joiner=""): signdata=signdata+joiner+""+signkey m=hashlib.md5(signdata) sign = m.hexdigest() return sign
计算hmacsha1
hmac:密钥相关的哈希运算消息认证码,hmac运算利用哈希算法(可以是MD5或者SHA-1),以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
作用:
(1)验证接受的授权数据和认证数据;
(2)确认接受到的命令请求是已经授权的请求且传送过程没有被篡改
import hmac import base64 def hmacSha1WithBase64(signdata,signkey): sign = hmac.new(signkey, signdata,sha1).digest() sign = base64.b64encode(sign) return sign
字符串拼接
from collections import OrderedDict def composeStr(data,joiner,withkey=True,key_value_joiner="="): data = OrderedDict(sorted(data.items(), key=lambda t:t[0])) if withkey : signdata = joiner.join([key_value_joiner.join((str(key), str(elem))) for key, elem in data.iteritems()]) else : signdata= joiner.join([elem for key, elem in data.items()]) return signdata
上一篇: .netcore实现一个读写分离的数据库访问中间件
下一篇: python学习笔记--工资条发放软件