常用模块整理


logging模块

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。

 日志级别,日志格式,输出位置

  logging
# 日志模块
# 将你需要\想要记录的内容帮你以你需要的格式写到文件里
# 同时能提供给你一些辅助的信息 : 行号\时间\类型

# 日志是做什么用的
# 记录一些行为\错误
# 对数据库进行了修改,谁操作的
# xxx进行了注册
# xxx进行了登录
# xxx使用了哪些功能
# 警告
# 程序中可以预测的一些异常
# 错误信息
# 记录信息且不会影响程序继续执行
import time
import logging

# fh = logging.FileHandler('test.log',mode='a',encoding='utf-8')
# sh = logging.StreamHandler()
# logging.basicConfig(
# format='%(asctime)s - %(name)s - %(levelname)s -%(module)s[%(lineno)d]: %(message)s',
# datefmt='%Y-%m-%d %H:%M:%S %p',
# level=logging.DEBUG,
# handlers=[fh,sh],
# )

# logging.debug('debug message')
# logging.info('info message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')

# 由低到高,问题越严重
# debug info warning error critical
# 调试 信息 警告 错误 批判的

# logging默认显

如果需要在类中打印方法的名称,需要在日志格式中添加一个字段%(funcName)s

=========================================================================


# 日志的切割
# import time
# import logging
# from logging import handlers

# sh = logging.StreamHandler()
# rh = handlers.RotatingFileHandler(r'D:\lessons\周末29期\day9\rotatdir\myapp.log',
# maxBytes=1024,backupCount=5,encoding='utf-8')
# fh = handlers.TimedRotatingFileHandler(filename=r'D:\lessons\周末29期\day9\timeRotatdir\x2.log',
# when='s', interval=5, encoding='utf-8')
# logging.basicConfig(
# format='%(asctime)s - %(name)s - %(levelname)s -%(module)s[%(lineno)d]: %(message)s',
# datefmt='%Y-%m-%d %H:%M:%S %p',
# handlers=[fh,sh,rh],
# level=logging.ERROR
# )

# for i in range(1,100000):
# time.sleep(1)
# logging.error('KeyboardInterrupt error %s'%str(i))

# logger对象的配置方式
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log',encoding='utf-8')
fh.setLevel(logging.INFO)

# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
formatter1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
formatter2 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s[%(lineno)d]: %(message)s')

fh.setFormatter(formatter1)
ch.setFormatter(formatter2)
logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
logger.addHandler(ch)

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 import time
 2 import logging
 3 from logging import handlers
 4 
 5 sh = logging.StreamHandler()
 6 rh = handlers.RotatingFileHandler('myapp.log', maxBytes=1024,backupCount=5)
 7 fh = handlers.TimedRotatingFileHandler(filename='x2.log', when='s', interval=5, encoding='utf-8')
 8 logging.basicConfig(
 9     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
10     datefmt='%Y-%m-%d %H:%M:%S %p',
11     handlers=[fh,sh,rh],
12     level=logging.ERROR
13 )
14 
15 for i in range(1,100000):
16     time.sleep(1)
17     logging.error('KeyboardInterrupt error %s'%str(i))

配置的参数

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

注:

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过fh.setLevel(logging.Debug)单对文件流设置某个级别。

os模块

os模块是一个和操作系统相关的模块,是一个和操作系统交互的模块

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.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行shell命令,获取执行结果
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd

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的大小
os.stat('path/filename')  获取文件/目录信息 的结构说明
#################################
stat 结构:

st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

stat 结构
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

sys模块

sys模块是一个和python程序交互的一个模块

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

 datetime模块

昨日日期
1
import datetime 2 def getYesterday(): 3 today=datetime.date.today() 4 oneday=datetime.timedelta(days=1) 5 yesterday=today-oneday 6 return yesterday 7 8 # 输出 9 print(getYesterday())
 

相关