1、random 模块
random.random() ,返回>=0.0&<1.0的随机浮点数
random.randrange(step) ,返回>=0&<step,步长为1的随机整数
random.randrange(start,step[,step])返回>=start&<step,步长为step的随机整数
random.randint(a,b)返回>=a&<=b之间的随机整数
import random
for i in range(0,3):
x=random.random() #大于等于0.0小于1.0
print("x的值:",x)
for i in range(0,3):
y=random.randrange(5)#大于0小于5
print("y的值:",y)
for i in range(0,3):
z=random.randrange(5,10) #包括5不包括10
print("z的值:",z)
for i in range(0,3):
w=random.randint(5,10) #包括5,10
print("w的值:",w)
运行结果:
x的值: 0.6571710502811471
x的值: 0.37297062793875524
x的值: 0.24956516375229454
y的值: 0
y的值: 2
y的值: 2
z的值: 9
z的值: 7
z的值: 7
w的值: 10
w的值: 5
w的值: 8
第二次运行结果:
x的值: 0.4512323198927247
x的值: 0.1508498014315055
x的值: 0.9328511196078411
y的值: 4
y的值: 1
y的值: 1
z的值: 6
z的值: 7
z的值: 9
w的值: 9
w的值: 8
w的值: 6
2、os模块
(1)os模块提供了使用操作系统功能的一些函数
os.rename(src,dst) 修改文件名,scr是源文件,dst是目标文件,它们可以是绝对路径也可以是相对路径
os.remove(path)删除path所指的文件,如果Path是目录,会报错OSError
os.mkdir(path)创建path所指的目录,如果目录已存在,会报错FileExistsError
os.rmdir(path)删除path所指的目录,如果目录非空,会报错OSError
os.walk(top)遍历top所指的目录树,自顶向下遍历目录树,返回值是一个三元组(目录路径,目录名列表,文件名列表)
os.listdir(dir)列出指定目录中的文件和子目录
常用属性:
os.curdir,获取当前目录
os.pardir,获取当前父目录
import os
fname='textfile.txt'
with open(fname,'r',encoding='utf-8') as f: #读写文件指定字符集很重要
b=f.read()
print(b)
copy_f_name='copy.txt'
with open(copy_f_name,'w',encoding='utf-8') as co:
co.writelines(b)
print('复制文件成功')
try:
os.rename(copy_f_name,'copy2.txt')
except OSError:
os.remove('copy2.txt')
print("当前目录",os.listdir(os.curdir))
print("父目录",os.listdir(os.pardir))
try:
os.mkdir('subdir')
except OSError:
os.rmdir('subdir')
for item in os.walk('.'):
print("top所指的目录树",item)
运行结果:
hello大家好
复制文件成功
当前目录 ['abnormal.py', 'abs01.py', 'abs02.py', 'baidu.py', 'baidujs.py', 'cainiao01.py', 'class01.py', 'class02.py', 'class_demo.py', 'class_test.py', 'class_test1.py', 'copy2.txt', 'decorator001.py', 'decorator02.py', 'fileop.py', 'imp.py', 'input_demo.py', 'login126.py', 'math_test.py', 'model', 'pub.py', 're01.py', 'script01.py', 'script0626.py', 'script0627.py', 'script1.py', 'test.py', 'testbaidu.py', 'textfile.txt', 'unittest01', 'youdao.py', '__init__.py', '__pycache__']
父目录 ['.idea', 'config', 'framework', 'logs', 'pageobjects', 'testscript', 'testsuits', 'tools', 'venv', '__pycache__']
创建目录
top所指的目录树 ('.', ['model', 'subdir', 'unittest01', '__pycache__'], ['abnormal.py', 'abs01.py', 'abs02.py', 'baidu.py', 'baidujs.py', 'cainiao01.py', 'class01.py', 'class02.py', 'class_demo.py', 'class_test.py', 'class_test1.py', 'copy2.txt', 'decorator001.py', 'decorator02.py', 'fileop.py', 'imp.py', 'input_demo.py', 'login126.py', 'math_test.py', 'pub.py', 're01.py', 'script01.py', 'script0626.py', 'script0627.py', 'script1.py', 'test.py', 'testbaidu.py', 'textfile.txt', 'youdao.py', '__init__.py'])
top所指的目录树 ('.\\model', ['__pycache__'], ['count.py', 'new_count.py', '__init__.py'])
top所指的目录树 ('.\\model\\__pycache__', [], [])
top所指的目录树 ('.\\subdir', [], [])
top所指的目录树 ('.\\unittest01', ['__pycache__'], ['module.py', 'test.py'])
top所指的目录树 ('.\\unittest01\\__pycache__', [], ['module.cpython-37.pyc'])
top所指的目录树 ('.\\__pycache__', [], ['abs01.cpython-37.pyc', '__init__.cpython-37.pyc'])
(2)os.path模块
os.path模块提供对路径、目录、文件进行管理的函数:
os.path.abspath(path)返回path的绝对路径
os.path.basename(path)返回路径的基础名部分,path是文件返回文件名,path是目录,返回最后目录名
os.path.dirname(path)返回path路径中目录部分
os.path.exists(path)判断path是否存在
os.path.isfile(path)如果Path是文件,返回true
os.path.isdir(path)如果path是目录,返回true
os.path.getatime(path)返回最后一次访问时间,返回一个unix时间戳,文件不存在,报错OSError
os.path.getmtime(path)返回最后修改时间,文件不存在,报错OSError
os.path.getctime(path)返回创建时间,文件不存在,报错OSError
os.path.getsize(path)返回文件大小,字节为单位,文件不存在,报错OSError
import os.path
from datetime import datetime
fname='textfile.txt'
afname=r'E:\navy_lu\python\seleniumproject\testscript\textfile.txt'
basename=os.path.basename(afname)
print(basename) #textfile.txt
dirname=os.path.dirname(afname)
print(dirname) #E:\navy_lu\python\seleniumproject\testscript
print(os.path.abspath(afname)) #E:\navy_lu\python\seleniumproject\testscript\textfile.txt
print(os.path.abspath(fname)) #E:\navy_lu\python\seleniumproject\pageobjects\testscript\textfile.txt
#print(os.path.getsize(afname))
print(os.path.getsize(fname)) #14
print(datetime.fromtimestamp(os.path.getatime(fname))) #2019-07-05 19:13:42.716783
print(datetime.fromtimestamp(os.path.getctime(fname))) #2019-07-05 17:43:17.727878
print(datetime.fromtimestamp(os.path.getmtime(fname))) #2019-07-05 18:30:43.643272
#
print(os.path.isfile(fname)) #True
print(os.path.isfile(afname)) #False
print(os.path.isdir(afname)) #False
5、logging模块
(1)日志级别:5级
DEBUG:debug(),调试时输出的信息
INFO:info(),输出一些关键点信息
WARNING:warning(),一些警告信息
ERROR:error(),比较严重的错误
CRITICAL:critical(),非常严重的错误
注意:当设置了一个级别,比它高的级别的信息都能输出。如设置了warning级别,比它高的error()和critical()都会输出
import logging
logging.basicConfig(level=logging.DEBUG) #根(root)日志
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
输出结果:
DEBUG:root:debug
INFO:root:info
WARNING:root:warning
ERROR:root:error
CRITICAL:root:
import logging
logging.basicConfig(level=logging.ERROR) #根(root)日志
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
运行结果:
ERROR:root:error
CRITICAL:root:critical
import logging
logging.basicConfig(level=logging.ERROR) #根(root)日志
logger=logging.getLogger(__name__) #自定义日志器
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
运行结果:
ERROR:root:error
CRITICAL:root:critical
ERROR:__main__:error
CRITICAL:__main__:critical
(2)日志器格式化
%(name)s:日志器名
%(asctime)s:输出日志时间
%(filename)s:包括路径的文件名
%(fileName)s:函数名
%(levelname)s:日志等级
%(processName)s:进程名
%(threadName)s:线程名
%(message)s:输出的消息
import logging
logging.basicConfig(level=logging.ERROR,format='%(asctime)s-%(threadName)s-%(name)s-%(message)s') #根(root)日志其
logger=logging.getLogger(__name__) #自定义日志器
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
运行结果:
2019-07-09 20:13:52,660-MainThread-__main__-error
2019-07-09 20:13:52,660-MainThread-__main__-critical
(3)日志重定位:默认输出到控制台,也可以输出到别的地方
import logging
logging.basicConfig(level=logging.ERROR,format='%(asctime)s-%(threadName)s-%(name)s-%(message)s',filename='test.log') #根(root)日志其
logger=logging.getLogger(__name__) #自定义日志器
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
运行后会在当前目录生成一个test.log文件,把日志输出到这个文件中,不再输出到控制台
(4)配置文件
需要配置:日志器(logger)、处理器(handler)、格式化器(formatter)、过滤器(filter)
- logger:提供日志接口,供应用代码使用。
- handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。
- filter:提供一种优雅的方式决定一个日志记录是否发送到handler。
- formatter:指定日志记录输出的具体格式。
配置文件logger.conf代码如下:
[loggers] #日志器配置
keys=root,simpleExample #日志器包含了root和simpleExample
[logger_root]#配置根日志器
level=DEBUG
handlers=consoleHandler #日志器对应的处理器
[logger_simpleExample]#配置simpleExample日志器
level=DEBUG
handlers=fileHandler #日志器对应的处理器
qua1name=logger1 #日志器名字,根日志器不需要配置名称,就叫根日志器
[handlers]
keys=consoleHandler,fileHandler #处理器包含了两个:
[handler_consoleHandler]#consoleHandler处理器
class=StreamHandler #基于输出流的
level=DEBUG
formatter=formatter2
args=(sys.stdout,)
[handler_fileHandler]#fileHandler处理器
class=FileHandler #输出到文件的
level=DEBUG
formatter=simpleFormatter
args=('test.log','a') #test.log输入到这个文件,a追加
[formatters]
keys=simpleFormatter,formatter2 #日志器包含simpleFormatter和formatter2
[formatter_simpleFormatter] #配置simpleFormatter格式化器
format=%(asctime)s-%(threadName)s-%(name)s-%(message)s
[formatter_formatter2] #配置simpleFormatter格式化器
format=%(asctime)s-%(name)s-%(message)s
#如果使用的是logger1,handlers就是filehandler,formatter就是simpleExample
#如果使用的是root日志器,handlers就是consoleHandler,formatter也是formatter2
#自己定义的日志器会继承根日志器
import logging
import logging.config
logging.config.fileConfig('logger.conf')
logger=logging.getLogger('logger1') #自定义日志器
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
运行结果: