zoukankan      html  css  js  c++  java
  • 【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")
    'xe6xb5x8bxe8xafx95'
    >>> 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
    
  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/amyzhu/p/9102751.html
Copyright © 2011-2022 走看看