zoukankan      html  css  js  c++  java
  • Python--模块

    模块的定义:模块就是一个py文件,模块是写好的,但是不能直接使用的功能,使用是需要用import关键字引用
    模块分为三种:内置模块、扩展模块、自定义模块
    collections模块,在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据
    类型:Counter、deque、defaultdict、namedtuple和OrderedDict(有序的字典类型)等。

    collections模块
    import collections
    声明一个有序的字典
    t = collections.OrderedDict()#声明t是一个有序的字典
    print(t) --->OrderedDict() t的操作和字典的操作一样
    t['apple'] = 15
    t['orange'] = 12
    for i in t:
      print(i)----->输出结果为:apple 15
    orange 12 每次运行的时候都是按照这个顺序显示
    定义一个默认字典,并且字典的value值是一个列表,如果字典中没好友key,如果key不在默认字典中,则创建一个默认值为[]空列表的key
    d = collections.defaultdict(list)#
    for value in  values:
    if value>66:
    if 'k1' in my_dict:
    d['k1'].append(value)
    else:
    d['k1'] = [value]
    else:
    if 'k2' in my_dict:
    d['k2'].append(value)
    else:
    d['k2'] = [value]
    namedtuple我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:
    命名方式collections.namedtuple('名称',[属性list])
    point = collections.namedtuple('point',['x','y'])
    p=point(1,2)
    print(p.x)----->输出结果为1
    deque 双端队列deque除了实现list的append()pop()外,还支持appendleft()popleft()
    这样就可以非常高效地往头部添加或删除元素。

    q = collections.deque([])
    q.append(1)
    q.append(2)
    q.appendleft('NO1')
    print(q)---->deque(['NO1', 1, 2])
     
    time 模块:有三种方式来表示时间,时间戳,元组(struct_time),格式化时间
    时间戳时间print(time.time())
    格式化时间:print(time.strftime("%Y-%m-%d %H-%M-%S"))--->2018-05-10 20-59-39当前时间
          print(time.strftime("%Y-%m-%d %H-%M-%S",time.)
    结构化时间:print(time.localtime())--->time.struct_time(tm_year=2018, tm_mon=5, tm_mday=10, tm_hour=21, tm_min=3, tm_sec=43, tm_wday=3, tm_yday=130, tm_isdst=0)
          print(time.localtime(1500000000))-->可以接收一个时间戳时间

     

    
    

    结构化时间是时间戳时间(计算机看懂的时间)转化为格式化时间(人能看懂的时间)的桥梁


    二、random模块,随机取值模块

    imoprt random
    print(random.random())--->随机生成一个大于0小于1的小数
    print(random.ranint(1,5))--->随机生成一个1到5之间的整数
    print(random.randrange(1,10,2))--->随机生成一个1到10之间的奇数
    print(random.choice([1,'小A在哪',[4,5]])) --->随机返回一个元素,返回1或者小A在哪,[4,5]
    print(random.sample([1,2,3,4,5,6],3))-->返回列表元素任意三个组合,random.sample(list,n)注意,n的值必须大于list的列表长度
    随机生成一个6位数的验证码的练习:
      import random
      def ran():
        str1 = ''
       for i in range(6):#循环几次生成一个几位数的二维码
          num=random.randint(1,10)) #生成一个1-10之间的整数
          s1=chr(random.randint(65,90))#数字转化成对应的大写字母A-Z
          s2=chr(random.randint(97,122))#数字转化成对应的小写字母a-z
          s=random.choice([str(num),s1,s2])#随机列表中的一个值
          str1 += s #将每次随机返回的字符串拼接
        return str
     
    三、sys 模块:sys模块是与python解释器交互的一个接口
    sys.argv           命令行参数List,第一个元素是程序本身路径
    sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
    sys.version        获取Python解释程序的版本信息
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    例如:print(sys.argv)--->结果为['D:/oldboy/day05/复习视频/木块.py']
    sys.platform 返回操作系统平台名称一个模块能否被导入,全看在不在sys.path列表所包含的列表下

    四、os模块,os模块是与操作系统交互的一个接口
    删除文件夹相关的:
      os.makedirs('dirname1/dirname2')    可生成多层递归目录
      os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
      os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
      os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    文件路径相关:
      os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
      os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
      os.curdir  返回当前目录: ('.')
      os.pardir  获取当前目录的父目录字符串名:('..')
    
    
    os.environ  获取系统环境变量
    
    
      os.system("bash command")  运行shell命令,直接显示
      os.popen("bash command).read()  运行shell命令,获取执行结果
    os.path系列:
    
    
      os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。
                            即os.path.split(path)的第二个元素
      os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
      os.path.isabs(path)  如果path是绝对路径,返回True
      os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
      os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
      os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
      os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
      os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
      os.path.getsize(path) 返回path的大小
    hashlib模块:将一个字符串进行摘要运算,拿到一个固定的值,hashlib模块不是一个算法,是包含了多个算法的模块
    比较常用的算法是SHA算法和Md5算法
    功能:加密功能;校验文件的一致性
    import hashlib
    md5Obj = hashlib.md5() #实例化一个MD5摘要算法的对象
    md5Obj.update('liuhaiyang'.encode('utf-8')) #使用MD5算法的对象,来操作一个字符串,注意操作的字符串必须转化为byte类型,使用encoding
    a = md5Obj.hexdigest() #获取算法的结果得到一个16进制的结果
    print(a)----> d0117e9ad06e29b46169e72a73c8b56c

    SHA 算法:用法和md5的使用方法一样,最常用的是sha1
    ret1 = hashlib.sha1()
    ret1.update('liuhaiyang'.encode('utf-8'))
    a = ret1.hexdigest()
    print(a)------>e0ca364ff0d9b28115e7566c56a991c12954b8df

    为了避免撞库加盐:md5Obj = hashlib.md5('alex'.encoding('utf-8'))
    当然这种方式也不安全,就采用动态加盐 username = 'alex'

    md5Obj = hashlib.md5(username.encoding('utf-8')
    configparser 模块:只要处理配置文件
    import configparser
    config = configparser.ConfigParser()
    config["DEFAULT"] = {'ServerAliveInterval': '45',
    'Compression': 'yes',
    'CompressionLevel': '9',
    'ForwardX11':'yes'
    }
    config['bitbucket.org'] = {'User':'hg'}
    config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
    with open('example.ini', 'w') as f:
    config.write(f)----->生成一个配置example.ini的配置文件
    
    
    print(config.sections())        #  []
    config.read('example.ini')
    print(config.sections()) # ['bitbucket.org', 'topsecret.server.com']
    print('bytebong.com' in config) # False
    print('bitbucket.org' in config) # True

    print(config['bitbucket.org']["user"]) # hg
    print(config['DEFAULT']['Compression']) #yes
    print(config['topsecret.server.com']['ForwardX11']) #no
    print(config['bitbucket.org']) #<Section: bitbucket.org>
    for key in config['bitbucket.org']: # 注意,有default会默认default的键
    print(key)
    print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键
    print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对
    print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
    logging模块:日志模块,一些程序执行的中间过程,以及用户行为,需要记录下来,当程序出错的时候(对内看的),方便查找
    logging有两种用法:1.简单配置--不支持中文
    2.使用logger对象的方式配置,该方法使用的时候更多一些!
    简单配置:
    import logging
    logging.debug() #非常细节的操作,都记录,方便排查错误
    logging.info() #正常的操作信息
    logging.warning() #操作导致程序问题,但是程序可以正常运转
    logging.error() #操作导致程序问题,程序不能正常运转了
    logging.critical() #操作导致程序崩溃
    简单配置使用:
    import logging

    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warning message')
    logging.error('error message')
    logging.critical('critical message')----> warning message,error message,critical message 默认输出warning级别以上的日志

    import logging

    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warning message')
    logging.error('error message')
    logging.critical('critical message')----> warning message,error message,critical message 默认输出warning级别以上的日志


    import logging
    logging.basicConfig(level=logging.DEBUG) #指定日志的输出级别
    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warning message')
    logging.error('error message')
    logging.critical('critical message')--->输出所有的debug信息
    灵活配置日志级别,日志格式,输出位置:
    import logging  
    logging.basicConfig(level=logging.DEBUG,  
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
                        datefmt='%a, %d %b %Y %H:%M:%S',  
                        filename='/tmp/test.log',  
                        filemode='w')  
      
    logging.debug('debug message')  
    logging.info('info message')  
    logging.warning('warning message')  
    logging.error('error message')  
    logging.critical('critical message')

    logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
    
    filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
    filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    format:指定handler使用的日志显示格式。
    datefmt:指定日期时间格式。
    level:设置rootlogger(后边会讲解具体概念)的日志级别
    stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
    
    format参数中可能用到的格式化串:
    %(name)s Logger的名字
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    %(filename)s 调用日志输出函数的模块的文件名
    %(module)s 调用日志输出函数的模块名
    %(funcName)s 调用日志输出函数的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(thread)d 线程ID。可能没有
    %(threadName)s 线程名。可能没有
    %(process)d 进程ID。可能没有
    %(message)s用户输出的消息

    logger对象配置:

    logger = logging.getLogger()
    fh = logging.FileHandle('log.log',enconding='utf-8') #创建一个可操作性的文件对象,fh
    logger.addHandler(fh)
    sh = logger.StreamHandle()#创建一个对象,往屏幕上输出
    logger.addHandler(sh)
    logger.warning('warning message')

    指定日志输出格式:
    logger = logging.getLogger()
    '''创建一个日志输出的格式,可以指定多个格式,让屏幕和文件显示不同的日志格式'''
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    #往文件中输入
    fh = logging.FileHandler('log.log') #创造一个可以操作文件的对象
    fh.setFormatter(formatter)
    logger.addHandler(fh)#往文件里输入
    sh = logging.StreamHandler()#往屏幕上输出
    sh.setFormatter(formatter)
    logger.addHandler(sh)
    logger.warning('warning message')
     
  • 相关阅读:
    Navicat15 for Mysql激活教程
    Overview
    NoSQL之一:Memcached
    Git学习(二):Git的初步使用
    Git学习(一):版本控制介绍及安装
    Docker学习(一):容器介绍
    ElasticStack学习(十):深入ElasticSearch搜索之QueryFiltering、多/单字符串的多字段查询
    ElasticStack学习(九):深入ElasticSearch搜索之词项、全文本、结构化搜索及相关性算分
    ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探
    ElasticStack学习(七):ElasticSearch之Mapping初探
  • 原文地址:https://www.cnblogs.com/xiaoAzaina/p/9021177.html
Copyright © 2011-2022 走看看