# -*- coding: utf-8 -*- # !/usr/bin/env python """ 字符处理的工具类 """ import hashlib import random import string # 错误信息重定向 from typing import Iterable from apilib.utils_sys import PY3 def cn(_): return unicode(_).encode('utf-8') def get_random_string(length = 8): src_digits = string.digits src_uppercase = string.ascii_uppercase src_lowercase = string.ascii_lowercase digits_num = random.randint(1, 6) uppercase_num = random.randint(1, length - digits_num - 1) lowercase_num = length - (digits_num + uppercase_num) random_string = random.sample(src_digits, digits_num) + random.sample(src_uppercase, uppercase_num) + random.sample( src_lowercase, lowercase_num) random.shuffle(random_string) return ''.join(random_string) def get_random_str(num, seq=string.ascii_letters): ret_list = [] for i in range(1, num + 1): ret_list.append("".join(random.sample(seq, 1))) return "".join(ret_list) def generate_random_seq(size = 32): char = string.ascii_letters + string.digits return "".join(random.choice(char) for _ in range(size)) if PY3: unicode_type = str basestring_type = (str, bytes) else: unicode_type = unicode basestring_type = basestring def encode(s): return s.encode('utf-8') if isinstance(s, unicode_type) else s def decode(s): return s.decode('utf-8') if isinstance(s, bytes) else s def md5(_): return hashlib.md5(_).hexdigest() # TODO: 暂时放这儿吧 def encrypt_display(str): return '******' def split_str(s, startIndex=0, lens=None, toInt=False): """ 分割字符串的函数,用于将协议返还的串口数据分割成指定的长度 ex: s = "660000FFFF00A1" startIndex = 2 lens = "4422" 返还 ["0000", "FFFF", "00", "A1"] :param s: 被分割的字符串 :param startIndex: 被分割起始位置 :param lens: 要被分割的长度 :param toInt: 分割后是否转为 int 数值 :return: list """ if lens is None: lens = list() if not isinstance(lens, Iterable): raise TypeError("indexes mast be Iterable") result = list() for _len in lens: endIndex = int(startIndex) + int(_len) tempS = s[startIndex: endIndex] if toInt: tempS = int(tempS, 16) result.append(tempS) startIndex = endIndex return result def make_title_from_dict(valueDictList): result = '' keys = [] for kd in valueDictList: keys.extend(kd.keys()) maxLen = 0 for k in keys: if len(k) > maxLen: maxLen = len(k) for valueDict in valueDictList: for k,v in valueDict.items(): if k == '': result += u'{}\\n'.format(v) else: needTab = 2 + (maxLen - len(k))/2 tabs = '' for ii in range(needTab): tabs += '\\t' result += '\\n\\n%s:%s%s' % (k,tabs,v) result += '\\n' return result def make_qr_code(url, logoUrl = None): from io import BytesIO import qrcode img = qrcode.make(url) bytesIo = BytesIO() img.save(bytesIo, format = 'PNG') import base64 return base64.b64encode(bytesIo.getvalue())