123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- # -*- 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())
|