python-日常临时笔记

1. 对网络请求报文进行编码整理

# 对报文参数进行处理
def unicode_convert(input):
    if isinstance(input, dict):
        return {unicode_convert(key): unicode_convert(value) for key, value in input.iteritems()}
    elif isinstance(input, list):
        return [unicode_convert(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input

2. 解决json无法序列化datetime数据类型

import json
import datetime


class DateEncoder(json.JSONEncoder):
    """
    json 无法序列化datetime类型,自定义进行序列化
    """

    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        else:
            return json.JSONEncoder.default(self, obj)


# 使用
s = datetime.datetime.now()
print(type(s))

test = {"time": s, "life": [11, 22, 33]}
print(json.dumps(test, cls=DateEncoder))

3. 动态加载文件中的模块

# 1. 每个模块都需添加__all__属性,将需要导出的方法添加到里面
# 示例如下
import os

import glob

all_check_files = glob.glob('../check_modules/*.py', recursive=True)

# 所有模块中的方法名
check_list = []
check_dict = {}
for module_file in all_check_files:
    module_name, module_ext = os.path.splitext(os.path.basename(module_file))
    """动态导入模块中的方法1"""
    module = __import__(f"check_modules.{module_name}", fromlist=[module_name, ])
    for func in dir(module):
        print(getattr(module, "__all__"))
        if not func.startswith("__") and func in getattr(module, "__all__"):
            # 收集所有模块中的方法名
            check_list.append(func)
            # 构建校验项动态字典
            check_dict.update({func.upper(): getattr(module, func)})

    """动态导入模块中的方法2"""
    # import importlib
    # ret = importlib.import_module(name=f".{module_name}", package=f"check_modules")
    # print(ret)
    # print(dir(ret))
posted @ 2020-10-21 16:15  Alive_2020  阅读(128)  评论(0编辑  收藏  举报