为了账号安全,请及时绑定邮箱和手机立即绑定

第五篇 Python常用的模块

标签:
Python

一、logging模块

1、日志级别

        CRITICAL = 50 #FATAL = CRITICAL

        ERROR = 40

        WARNING = 30 #WARN = WARNING

        INFO = 20

        DEBUG = 10

        NOTSET = 0 #不设置

2、默认级别为warning,默认打印到终端

        import logging

        logging.debug('调试debug')

        logging.info('消息info')

        logging.warning('警告warn')

        logging.error('错误error')

        logging.critical('严重critical')

        输出:

        WARNING:root:警告warn

        ERROR:root:错误error

        CRITICAL:root:严重critical

3、为logging模块指定全局配置,针对所有logger有效,控制打印到文件中

可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有:

        filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。

        filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。

        format:指定handler使用的日志显示格式。 

        datefmt:指定日期时间格式。 

        level:设置rootlogger(后边会讲解具体概念)的日志级别 

        stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

    #格式

        %(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:用户输出的消息

4、logging模块的Formatter,Handler,Logger,Filter对象

原理图:  稍后补上

        logger:产生日志的对象

        Filter:过滤日志的对象

        Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端

        Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式

5、Logger与Handler的级别

logger是第一级过滤,然后才能到handler,我们可以给logger和handler同时设置level,但是需要注意的是:

        Logger is also the first to filter the message based on a level — if you set the logger to INFO, and all handlers to DEBUG, you still won't receive DEBUG messages on handlers — they'll be rejected by the logger itself. If you set logger to DEBUG, but all handlers to INFO, you won't receive any DEBUG messages either — because while the logger says "ok, process this", the handlers reject it (DEBUG < INFO).

二、re模块

1、什么是正则?

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

2、常用匹配模式(元字符)

http://blog.csdn.net/yufenghyc/article/details/51078107

第五篇 Python常用的模块

 .*默认为贪婪匹配

    print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b']

    .*?为非贪婪匹配:推荐使用

    print(re.findall('a.*?b','a1b22222222b')) #['a1b']

3、re模块提供的方法介绍

    import re

    re.findall

    re.search 

    re.match

    re.split

    re.sub

    re.subn

    re.compile

三、time与datetime模块

1、在Python中,通常有这几种方式来表示时间:

    时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

    格式化的时间字符串(Format String)

    结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

         import time

         #我们先以当前时间为准,让大家快速认识三种形式的时间

         print(time.time()) # 时间戳:1487130156.419527

         print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53' 

         print(time.localtime()) #本地时区的struct_time

         print(time.gmtime())    #UTC时区的struct_time

2、计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间',于是有了下图的转换关系


第五篇 Python常用的模块

localtime([secs])将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

        time.localtime()

        time.localtime(1473525444.037215)

gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

mktime(t) : 将一个struct_time转化为时间戳。

        print(time.mktime(time.localtime()))#1473525749.0 

strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。

        print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56

time.strptime(string[, format])把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

        print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))

time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,

tm_wday=3, tm_yday=125, tm_isdst=-1)

在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

四、random模块

常用的一些属性:

    import random

    print(random.random()) #(0,1)----float    大于0且小于1之间的小数

    print(random.randint(1,3)) #[1,3]    大于等于1且小于等于3之间的整数

    print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数

    print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]

    print(random.sample([1,'23',[4,5]],2)) #列表元素任意2个组合

    print(random.uniform(1,3)) #大于1小于3的小数,如1.927109612082716

练习:写验证码

    import random

    def make_code(n):

            res=''

            for i in range(n):

                    s1=str(random.randint(0,9))    #随机取到的是一个数字,为了后面方便拼接 转华为字符串

                    s2=chr(random.randint(65,90)) #取到的数字刚好对应的是ASCII表中的大写字母

                    res+=random.choice([s1,s2])

            return res

    print(make_code(6))

五、os模块

os模块是与操作系统交互的一个接口

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd

    os.curdir  返回当前目录: ('.')

    os.pardir  获取当前目录的父目录字符串名:('..')

    os.makedirs('dirname1/dirname2')    可生成多层递归目录

    os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname

    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

    os.remove()  删除一个文件

    os.rename("oldname","newname")  重命名文件/目录

    os.stat('path/filename')  获取文件/目录信息

    os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

    os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:

    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

    os.system("bash command")  运行shell命令,直接显示

    os.environ  获取系统环境变量

    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的大小

os路径处理方法:

    方式一:推荐使用

        import os,sys

        possible_topdir = os.path.normpath(os.path.join(

                os.path.abspath(__file__),

                os.pardir, #上一级

                os.pardir,

                os.pardir

        ))

        sys.path.insert(0,possible_topdir)

    方式二:不推荐使用

        os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

六、sys模块

常用的属性:

    import sys

    sys.argv     命令行参数List,第一个元素是程序本身路径

    sys.exit(n)  退出程序,正常退出时exit(0)

    sys.version  获取Python解释程序的版本信息

    sys.maxint   最大的Int值

    sys.path     返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

    sys.platform 返回操作系统平台名

练习:编写进度条

    =========知识储备==========

    指定宽度

            print('[%-15s]' %'#')  #-是左对齐 15是宽度

            print('[%-15s]' %'##')

            print('[%-15s]' %'###')

            print('[%-15s]' %'####')

    打印%

        print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义 100%

    可传参来控制宽度

        print(('[%-%ds]' %50) %'#')#这个是错误的,这里这么想,先把50传值给%d,但是第一个%也会被认为要接受值,所以这里要保留他的本意,给下一次传值使用

        print('[%%-%ds]' %50) #[%-50s]

        print(('[%%-%ds]' %50) %'#')

        print(('[%%-%ds]' %50) %'##')

        print(('[%%-%ds]' %50) %'###')

    =========实现打印进度条函数==========

        import time

        def func1(percent, width=50):

                if percent >= 1:

                        percent = 1

                jindu = (('[%%-%ds]' % width) % ('#' * int(width * percent)))

                print('\r%s %d%%' % (jindu, int(100 * percent)), end='')

    =========应用==========

        recv_size=0

        total_size=10241

        while recv_size< total_size:

                time.sleep(0.1)

                recv_size+=1024

                func1(recv_size/total_size)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消