4.11Day18常用模块/random/shutil/logging

一、random:随机数
(0, 1) 小数:random.random() ***
[1, 10] 整数:random.randint(1, 10) *****
[1, 10) 整数:random.randrange(1, 10)
(1, 10) 小数:random.uniform(1, 10)
单列集合随机选择1个:random.choice(item) ***
单列集合随机选择n个(结果是list):random.sample(item, n)
洗牌单列集合:random.shuffle(item)

案例:产生指定位数的验证码
import random
def random_code(count):
code = ''
for i in range(count):
num = random.choice([1, 2, 3])
if num == 1: # 该位为数字
code += str(random.randint(0, 9))
elif num == 2: # 该位为大写字母
code += chr(random.randint(65, 90))
else: # 该位为小写字母
code += chr(random.randint(97, 122))
return code
print(random_code(5))
run==>
lf63V

def random_code1(count):
source = 'ABCDEFabcdef0123456789'
# 单列集合随机选择n个
code_list = random.sample(source, count)
return ''.jion(code_list)
print(random_code1(6)
run==>
C8A9e6

二、shutil:文件操作
基于路径的文件复制:
shutil.copyfile('a.py', 'b.py')

基于流的文件复制:
with open('a.py', 'rb') as r, open('c.py', 'wb') as w:
shutil.copyfileobj(r, w)

递归删除目录:
shtil.rmtree(r'D:\fullstack_s4\day18\代码\part1\part0')

文件移动:
shutil.move('a/aa.py', 'b/bb.py')

文件夹压缩:
shutil.make_archive('bbb', 'zip', r'D:\fullstack_s4\day18\代码\part1\b')
# bbb为压缩后目标文件名,zip为压缩种类

文件夹解压:
shutil.unpack_archive(r'D:\fullstack_s4\day18\代码\part1\bb.tar.gz', 'a/bbb', 'gztar')
shutil.unpack_archive(r'bbb.zip', 'a/b', 'zip')

三、shelve:可以用字典存取数据到文件的序列化模块
# 将序列化文件的dump和load封装
s_dic = shelve.open("target_file", writeback=True)
# 注:writeback允许序列化的可变类型,可以直接修改值

序列化::存
s_dic['key1'] = 'value1'
s_dic['key2'] = 'value2'
反序列化:取
print(s_dic['key1'])
文件释放
s_dic.close()

四、三流 ———— 系统标准输入流 | 输出流 | 错误流
import sys
sys.stdout.write('msg')
sys.stderr.write('msg')
msg = sys.stdin.readline()

print默认是对sys.stdout.write('msg') + sys.stdout.write('\n')的封装
格式化结束符print:print('msg', end='')

五、logging:日志模块
1) root logging的基本使用:五个级别
# 打印级别是人为规定的
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
2)root logging的基本配置:logging.basicConfig()
可在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参数会被忽略。

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

3)logging模块四个核心:Logger | Filter | Handler | Formater
logger:产生日志的对象

Filter:过滤日志的对象

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

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

示例:
import logging

#1、logger对象:负责产生日志,然后交给Filter过滤,然后交给不同的Handler输出
logger=logging.getLogger(__file__)

#2、Filter对象:不常用,略

#3、Handler对象:接收logger传来的日志,然后控制输出
h1=logging.FileHandler('t1.log') #打印到文件
h2=logging.FileHandler('t2.log') #打印到文件
h3=logging.StreamHandler() #打印到终端

#4、Formatter对象:日志格式
formmater1=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',)

formmater2=logging.Formatter('%(asctime)s : %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',)

formmater3=logging.Formatter('%(name)s %(message)s',)

#5、为Handler对象绑定格式
h1.setFormatter(formmater1)
h2.setFormatter(formmater2)
h3.setFormatter(formmater3)

#6、将Handler添加给logger并设置日志级别
logger.addHandler(h1)
logger.addHandler(h2)
logger.addHandler(h3)
logger.setLevel(10)

#7、测试
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')

4)logging模块的配置与使用
-- 配置文件:LOGGING_DIC = {}
-- 加载配置文件:logging.config.dictConfig(LOGGING_DIC) => logging.getLogger('log_name')

转载于:https://www.cnblogs.com/shuchengyi/articles/10692157.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值