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))
人生苦短,我用python!