python基础12 ---函数模块2
函数模块
一、sys函数模块详解
1、sys.argv[x]
功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出并应用。当x=0的时候程序内部取出的是该文件的绝对路径,当x=1的时候程序内部取出的是外部程序传入的第一个参数,以此类推。
2、sys.exit(n)
功能:当函数调用该模块时, 引发一个 SystemExit异常,若没有捕获这个异常,Python解释器会直接退出;捕获这个异常可以做一些额外的清理工作。0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。而os._exit() 直接退出 python程序,其后的代码也不会继续执行.
3、sys.path
功能:用于指定第三方模块和自定义模块的搜索路径以及搜索顺序。所以自己写的函数模块应当放到sys.path指定的模块路径中去,如果不想放也可以把自定义的模块路径通过sys.path.append('引用的模块路径')的方式添加到需要应用该模块的文件中去。
注:如果创建一个以.py结尾的文件名和第三方模块以及自定义模块重名时,当在该文件相同路径下调用重名的模块时,一定会报错。
二、logging模块
1、logging.basicConfig函数
1.1 通过logging.basicConfig函数对日志的输出格式及方式做相关配置
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='myapp.log',
filemode='w')
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')
1.2 logging.basicConfig函数配置说明
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
2、日志默认的等级顺序
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。
3、logging的四大类
logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则 返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。
handler:将(logger创建的)日志记录发送到合适的目的输出;个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现 日志分级过滤显示。
filter:提供了细度设备来决定输出哪条日志记录;即提供一种优雅的方式决定一个日志记录是否发送到handler。
formatter:决定日志记录的最终输出格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。
4、四大类详解
4.1 创建一个logger 》》》logger = logging.getLogger()
4.2 创建一个handler,用于写入日志文件 》》》fh = logging.FileHandler('文件的绝对路径或者是相对路径')
创建一个handler,用于输出到控制台 》》》ch = logging.StreamHandler() #由于是输出到控制台所以括号内不写内容更
4.3 定义handler的输出格式formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
4.4 定义一个filter
filter = logging.Filter('mylogger.child1.child2')
fh.addFilter(filter)
4.5 给logger添加handler 》》》logger.addFilter(filter)
4.6记录一条日志
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')
三、序列化模块
1、序列化的定义:由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。
2、反序列化的定义:把序列化后的对象从新读取到内存中称之为反序列化。(从磁盘和其他介质中读取出来)
3、python中可以使用 Pickle 和 json, 以及自定义序列化反序列化函数进行处理需要序列化的数据。json只能处理一些简单的数据序列化,建议使用Pickle。
4、json模块序列化和反序列化详解。
4.1json的dumps方法和loads方法,可实现数据的序列化和反序列化。具体来说,dumps方法,可将json格式数据序列为python的相关的数据类型;loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求。
4.2格式:json.dumps(序列化对象) #只能序列化一些简单的对象,序列化后的对象是用双引号引起来的
json.loads(反序列化对象)#反序列化的对象必须是用双引号引起来,且必须先序列化后才能反序列化
4.3步骤:1.先序列化对象 2.把序列化成的字符串写入文件
1.先打开序列化的文件 2.反序列化文件对象
5、pickle模块序列化和反序列化
5.1过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存
5.2格式:pickle.dump(序列化文件对象,序列化文件对象保存位置文件)#吧序列化对象保存在文件中需要以wb二进制的形式保存。
pickle.load(打开后的反序列化对象文件)#使用的时候只需要以rb二进制的形式把文件打开,然后用pickle.load读取数据就可以了。
5.3步骤:1.先打开文件,再序列化对象
2.先打开文件,再反序列化
注:无论是哪个模块序列化和反序列化打开的文件都需要打开后及时关闭。