欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[python] python常用函数

程序员文章站 2022-04-09 14:02:14
urlencode与urldecode 当url中包含中文或者参数包含中文,需要对中文或者特殊字符(/、&)做编码转换。 urlencode的本质:把字符串转为gbk编码,再把\x替换成%。如果终端是utf8编码的,需要把结果再转成utf8输出,否则会乱码。 urlencode urllib库里面的 ......

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