zoukankan      html  css  js  c++  java
  • python一些常用代码块

    centos下 python3无法print中文

    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-10: ordinal not in range(128

    这类问题多来源于python控制台的编码问题,进入python环境

    >>> import sys
    >>> sys.stdout.encoding
    'ANSI_X3.4-1968'
    

    发现这里的编码不是utf-8,而是一个ANSI_X3.4-1968,工程字符集,我们应该要将其改为utf-8才行。
    在root用户下声明编码:

    export LC_ALL='en_US.UTF-8'
    export PYTHONIOENCODING='utf-8'
    

    再到python环境试一下,发现可以了,这种情况下python输出中文就不会乱码了

    >>> import sys
    >>> sys.stdout.encoding
    'utf-8'
    

    日志文件(即在控制台打印也会写入到日志文件)

    import datetime
    import logging
    from logging import handlers
    ​
    class Logger(object):
        level_relations = {
            'debug': logging.DEBUG,
            'info': logging.INFO,
            'warning': logging.WARNING,
            'error': logging.ERROR,
            'crit': logging.CRITICAL
        }  # 日志级别关系映射
    ​
        def __init__(self, filename, level='info', when='D', backCount=3,
                     fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
            self.logger = logging.getLogger(filename)
            format_str = logging.Formatter(fmt)  # 设置日志格式
            self.logger.setLevel(self.level_relations.get(level))  # 设置日志级别
            sh = logging.StreamHandler()  # 往屏幕上输出
            sh.setFormatter(format_str)  # 设置屏幕上显示的格式
            th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount,
                                                   encoding='utf-8')  # 往文件里写入#指定间隔时间自动生成文件的处理器
            # 实例化TimedRotatingFileHandler
            # interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
            # S 秒
            # M 分
            # H 小时、
            # D 天、
            # W 每星期(interval==0时代表星期一)
            # midnight 每天凌晨
            th.setFormatter(format_str)  # 设置文件里写入的格式
            self.logger.addHandler(sh)  # 把对象加到logger里
            self.logger.addHandler(th)
            
    # 实例化log对象
    date = datetime.datetime.now().strftime('%Y%m%d')
    Log = Logger('/log/'+date+'.log', level='debug').logger
    ​
    # 日志使用
    from logger import Log
    Log.info(msg=(count1, cid, url))
    Log.debug(msg=(count1, cid, url))
    Log.error(msg=(count1, cid, url))
    Log.warning(msg=(count1, cid, url))
    

    生成随机ID

    import random
    def createId(self, length):
        _letter_cases = "abcdefghijklmnopqrstuvwxyz"
        _upper_cases = _letter_cases.upper()
        _numbers = ''.join(map(str, range(0, 10)))
        init_chars = ''.join((_letter_cases, _upper_cases, _numbers))
        result = ""
        for i in range(length):
            result = result + (random.choice(init_chars))
            return result
    

    将浏览器的Headers转换为字典

    def format_headers(string) -> dict:
        """
        将在Chrome上复制下来的浏览器UA格式化成字典,以
    为切割点
        :param string: 使用三引号的字符串
        :return:
        """
        string = string.strip().split('
    ')
        new_headers = {}
        for key_value in string:
            key_value_list = key_value.split(':')
            if len(key_value_list) > 2:
                new_headers.update({key_value_list[0]: ':'.join(key_value_list[1::])})
            else:
                new_headers.update({key_value_list[0]: key_value_list[1]})
        return new_headers
    

    62进制数与10进制转换

    def encode_b64(n):
        table = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        result = []
        temp = n
        if temp < 62:
            result.append(table[temp])
        else:
            while 0 < temp:
                result.append(table[temp % 62])
                temp = temp // 62
        return ''.join([x for x in reversed(result)])
    ​
    def decode_b64(str):
        table = {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5,
                 "6": 6, "7": 7, "8": 8, "9": 9,
                 "a": 10, "b": 11, "c": 12, "d": 13, "e": 14, "f": 15, "g": 16,
                 "h": 17, "i": 18, "j": 19, "k": 20, "l": 21, "m": 22, "n": 23,
                 "o": 24, "p": 25, "q": 26, "r": 27, "s": 28, "t": 29, "u": 30,
                 "v": 31, "w": 32, "x": 33, "y": 34, "z": 35,
                 "A": 36, "B": 37, "C": 38, "D": 39, "E": 40, "F": 41, "G": 42,
                 "H": 43, "I": 44, "J": 45, "K": 46, "L": 47, "M": 48, "N": 49,
                 "O": 50, "P": 51, "Q": 52, "R": 53, "S": 54, "T": 55, "U": 56,
                 "V": 57, "W": 58, "X": 59, "Y": 60, "Z": 61,
                 }
        result = 0
        for i in range(len(str)):
            result *= 62
            result += table[str[i]]
        return result
    ​
    #补齐位数,将原有的字符串补齐至6位字符串
    def fill_zero(str1):
        if len(str1) < 6:
            zero_str = ""
            for i in range(6-len(str1)):
                zero_str += '0'
            result = zero_str + str1
        return result
    ​
    print(decode_b64(fill_zero(encode_b64(1000))))
    

  • 相关阅读:
    Jquery 操作radio实例
    不错的linux下通用的java程序启动脚本(转载)
    activeMQ消费消息时网络流量异常大的问题
    利用passssh,批量远程修改机器密码
    tomcat的maxThreads、acceptCount(最大线程数、最大排队数)
    非阻塞IO、NIO为什么会快,我们为什么需要多线程
    关于find命令 name 匹配字符无法正确生效的问题 find: paths must precede expression:
    想取得刚才nextval()的值时,放心大胆的用currval()吧,currval()的返回值并不会因为nextval()的并发访问而混乱
    slef4j的好处
    杂(一) 奶酪
  • 原文地址:https://www.cnblogs.com/triangle959/p/12024357.html
Copyright © 2011-2022 走看看