python全栈开发 * 26知识点汇总 * 180709
26 logging collections random 模块
一.logging
低配:日志不能写入文件与显示同时进行
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='/tmp/test.log',
filemode='w') logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
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用户输出的消息
1.只写入文件:
import logging
logger=logging.getLogger() #创建一个对象
fn=logging.FileHandler("高配.log",encoding="utf-8",mode="w")
logger.addHandler(fn)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")
2.写入文件 显示同时进行
import logging
logger=logging.getLogger() #创建一个对象
fn=logging.FileHandler("高配.log",encoding="utf-8",mode="w")
sh=logging.StreamHandler()
logger.addHandler(fn)
logger.addHandler(sh)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")
3.设置显示模式
import logging
logger=logging.getLogger()
fh=logging.FileHandler("高配.log",encoding="utf-8",mode="w")
sh=logging.StreamHandler()
formatter=logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s")
logger.addHandler(fh)
logger.addHandler(sh)
sh.setFormatter(formatter)
fh.setFormatter(formatter)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")
4.设置等级
import logging
logger=logging.getLogger()
fh=logging.FileHandler("高配.log",encoding="utf-8",mode="w")
sh=logging.StreamHandler()
formatter=logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s")
logger.setLevel(logging.DEBUG) # 没有它显示和写入文件默认从warning开始
logger.addHandler(fh)
logger.addHandler(sh)
sh.setFormatter(formatter)
fh.setFormatter(formatter)
sh.setLevel(logging.DEBUG)
fh.setLevel(logging.INFO)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")
二.collections
1.namedtuple
from collections import namedtuple
point = namedtuple("point",["x","y"])
p=point(10,30) #point(x=10, y=30)
print(p)
2.deque 双向列队
from collections import deque
q=deque(["a","b","c","d","e","f"])
增加
q.append(666)
q.append(888)
q.appendleft(111)
q.appendleft(222) #deque([222, 111, 'a', 'b', 'c', 'd', 'e', 'f', 666, 888])
print(q)
删除
q1=deque(["a","b","c","d","e","f"])
q1.pop() # deque(['a', 'b', 'c', 'd', 'e'])
q1.pop() # deque(['a', 'b', 'c', 'd'])
q1.popleft() # deque(['b', 'c', 'd'])
q1.popleft() # deque(['c', 'd'])
print(q1)
补充: queue 先进先出 fifo原则
栈 :先进后出
3.OrderedDict
dic = {}
dic['name'] = 'alex'
dic['age'] = '1000'
dic['sex'] = '男'
print(dic)
from collections import OrderedDict
od=OrderedDict()
od["name"]="alex"
od["age"]="1000"
print(od) # OrderedDict([('name', 'alex'), ('age', '1000')])
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d) # {'a': 1, 'b': 2, 'c': 3}
from collections import OrderedDict
od1 = OrderedDict([('a', 1), ('c', 3), ('b', 2),])
print(od1) # OrderedDict([('a', 1), ('c', 3), ('b', 2)]) 4.defaultdict
练习
方法一
l1 = [11,22,33,44,55,77,88,99,90]
dic = {}
for i in l1:
if i<66:
if "key1" not in dic:
dic["key1"]=[]
dic["key1"].append(i)
else:
if "key2" not in dic:
dic["key2"]=[]
dic["key2"].append(i)
print(dic) # {'key1': [11, 22, 33, 44, 55], 'key2': [77, 88, 99, 90]}
方法二:
from collections import defaultdict
l1 = [11,22,33,44,55,77,88,99,90]
my_dict=defaultdict(list)
my_dict["k1"]
my_dict["k2"]
print(my_dict) #defaultdict(<class 'list'>, {'k1': [], 'k2': []})
for v in l1:
if v < 66:
my_dict["k1"].append(v)
else:
my_dict["k2"].append(v)
print(my_dict) # defaultdict(<class 'list'>, {'k1': [11, 22, 33, 44, 55], 'k2': [77, 88, 99, 90]})
练习2
dic1 = {} #---> dic1={1:5,2:5,3:5.....20:5}
方法一:
for i in range(1,21):
dic1[i]=5
print(dic1)
方法二:
dict={x:5 for x in range (1,21)}
print(dict)
方法三:
dict1=defaultdict(lambda :5)
for i in range(1,21):
dict1[i]
print(dict1)
方法四
dic2 = dict.fromkeys(range(1,21),5)
fromkeys 第一个参数中每一个拿出来和第二个参数组织成键值对 (神坑请注意:生成出来的键指向的value是同一个对象,改变其中一个,另一个也会跟着改变.)
print(dic2) 5.Counter
from collections import Counter
c=Counter("gdhhhfffddggghhhfff")
d=Counter([1,2,2,2,2,3,3,3,3,4,4,4,4])
e=Counter((6,6,6,6,6,8,8,8,8,8,8,))
b=Counter({"name":"alex","name":"eve","name":"mary"})
print(c) # Counter({'h': 6, 'f': 6, 'g': 4, 'd': 3}) 以字典的形式返回
print(d) # Counter({2: 4, 3: 4, 4: 4, 1: 1})
print(e) # Counter({8: 6, 6: 5})
print(b) # Counter({'name': 'mary'})
三.random
1.random.random() #0到1之间的小数 无参数
2.uniform(1,3) # 大于1 小于3的小数 参数
3.randint(1,5) # 1=<,=<5的整数
4.randrange(1,10,2) # 1到10之间的奇数 顾头不顾尾
5.choice([1,"23",[4,5]) # 括号里面必须是有索引的数据类型
6.sample([1,2,3,4,5,6,],2) #列表元素任意两个组合.
7.shuffle(item) # 打乱item的顺序
# 练习 生成随机验证码
#全数字
import random
def func():
code=""
for i in range(1,5):
num=str(random.randint(1,9)) code=code+num
return code
print(func())
# 数字和字母
print(ord("a"))#97
print(ord("z"))#122
print(ord("A"))#65
print(ord("Z"))#90
def func1():
code=""
for i in range(1,5):
num=str(random.randint(1,9))
apl1=chr(random.randint(97,122))
apl2=chr(random.randint(65,90))
it=random.choice([num,apl1,apl2])
code=code+it
return code
print(func1())
python全栈开发 * 26知识点汇总 * 180709的更多相关文章
- python全栈开发 * 10知识点汇总 * 180612
10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...
- python全栈开发 * 01知识点汇总 * 180530
一 python简介. 1.创始人: 吉多 .范罗苏姆 \ (Guido van Rossum). 2.时间 : 1989年. 3.主要应用领域 : 云计算 \ WEB开发 \ ...
- python全栈开发 * 32知识点汇总 * 180717
32 网络编程 (一)一.架构 定义:程序员开发的一种模式. 分类: C/S 架构 C/S即:Client与Server , 客户端/ 服务器模式 . 缺点 : 冗余 B/S 架构 Browser与S ...
- python全栈开发 * 12 知识点汇总 * 180530
12 知识点总结 装饰器进阶 ⼀. 通⽤装饰器的回顾1.开闭原则: 对增加功能开放. 对修改代码封闭2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能3.通⽤装饰器的写法:def wrap ...
- python全栈开发 * 36知识点汇总 * 180721
36 操作系统的发展史 进程一.手工操作--穿孔卡片 1.内容: 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制 台开关启动程序针对 ...
- python全栈开发 * 31知识点汇总 * 180716
31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...
- python全栈开发 * 24 知识点汇总 * 180705
24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...
- python全栈开发 * 27知识点汇总 * 180710
27 time os sys 模块 time 模块 一.表示时间的三种方式 时间戳(timestamp), 元组(struct_time),格式化时间字符串(Format string) 小 ...
- python全栈开发 * 14 知识点汇总 * 180530
14 生成器表达式 内置函数# 一.迭代器 (补充)# 1.如何判断迭代对象,迭代器# (1).dir(obj)检测对象有没有iter方法,然后it=obj.__iter__() 获取迭代器 , it ...
随机推荐
- html5学习笔记3——高级特性
一:Web存储 数据以 键/值 对存在, web网页的数据只允许该网页访问使用. web存储有两种: localStorage - 没有时间限制的数据存储,存于浏览器缓存 sessionStorage ...
- H+ 编辑tab页 保存后 刷新列表tab页 并关闭自已。tabA页调用tabB页的方法
//注:在contabs.js文件中 $(function () { }); 方法外 加入 //注: data-name="' + menuName + '" 这句是加入的自定义属 ...
- Django项目中自定义manage命令
挺不错的一篇文章:https://www.cnblogs.com/ajianbeyourself/p/3643304.html
- 你见过的最全面的python重点
首先和大家说个对不起,由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西,对于Nginx的东西我没总结在这里,大家可以Python聚焦看,点击直达专栏哦. ...
- (9) MySQL主主复制架构使用方法
一. 回忆主从复制的一些缺点 上节说到主从复制的一些问题 我们再来回忆一下 主从复制,增加了一个数据库副本,从数据库和主数据库的数据最终会是一致的 之所以说是最终一致,因为mysql复制是异步的,正常 ...
- Git入门到高级系列2-git高级操作
视频课程地址 腾讯课堂 git 清理 git clean命令用来从你的工作目录中删除所有没有tracked过的文件. 命令 说明 git clean -n 告诉你哪些文件会被删除. 记住他不会真正的删 ...
- opcache分享
opcache的技术分享ppt,独家唯一经过自己实验的分享 https://pan.baidu.com/s/1-73-QHOSeet7tcR81gto6Q
- dom4j 简单使用
1,需要用到dom4j的jar包.为了打开xml方便,设计一个简单的封装类. package cn.com.gtmc.glaf2.util; import java.io.File; import j ...
- 此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
1.问题描述 mvc从一个路径获取所有的图片信息,ajax方法如下: function getimages(day) { var year = $("#selYear").val( ...
- win10 caffe python Faster-RCNN训练自己数据集(转)
一.制作数据集 1. 关于训练的图片 不论你是网上找的图片或者你用别人的数据集,记住一点你的图片不能太小,width和height最好不要小于150.需要是jpeg的图片. 2.制作xml文件 1)L ...