zoukankan      html  css  js  c++  java
  • Python 递归将字典、列表、元组、字节内容为字节转为节符串

    需求:有时候读取redis的时候,会返回字典,并且内容为字节类型,此时需要转换,所以使用该函数轻松转换
    注意:此代码来源Tornado源码
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import typing
    from typing import Any, Union,Optional
    
    @typing.overload
    def to_unicode(value: str) -> str:
        pass
    
    @typing.overload  # noqa: F811
    def to_unicode(value: bytes) -> str:
        pass
    
    @typing.overload  # noqa: F811
    def to_unicode(value: None) -> None:
        pass
    
    unicode_type = str
    _TO_UNICODE_TYPES = (unicode_type, type(None))
    
    def to_unicode(value: Union[None, str, bytes], code_type='utf-8') -> Optional[str]:  # noqa: F811
        """字节类型转为字符串"""
        if isinstance(value, _TO_UNICODE_TYPES):
            return value
        if not isinstance(value, bytes):
            raise TypeError("Expected bytes, unicode, or None; got %r" % type(value))
        return value.decode(code_type)
    
    
    def recursive_unicode(obj: Any) -> Any:
        """ 递归将字典、列表、元组、字节内容为字节转为节符串 """
        if isinstance(obj, dict):
            return dict(
                (recursive_unicode(k), recursive_unicode(v)) for (k, v) in obj.items()
            )
        elif isinstance(obj, list):
            return list(recursive_unicode(i) for i in obj)
        elif isinstance(obj, tuple):
            return tuple(recursive_unicode(i) for i in obj)
        elif isinstance(obj, bytes):
            return to_unicode(obj)
        else:
            return obj
    if __name__ == '__main__':
        li = {b'a': 'a', b'c': b'123'}
        print(recursive_unicode(li))
  • 相关阅读:
    bzoj1027 状压dp
    CodeForces755F 贪心 + 多重背包二进制优化
    CodeForces632E 神奇的多重背包
    POJ3662 SPFA//二分 + 双端队列最短路
    bzoj1233 单调队列优化dp
    POJ3417 LCA+树dp
    Network
    树网的核/[SDOI2011]消防
    [APIO2010]巡逻
    核心城市
  • 原文地址:https://www.cnblogs.com/ygbh/p/14029292.html
Copyright © 2011-2022 走看看