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的更多相关文章

  1. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  2. python全栈开发 * 01知识点汇总 * 180530

    一 python简介. 1.创始人:  吉多 .范罗苏姆  \   (Guido van Rossum). 2.时间  :  1989年. 3.主要应用领域  :  云计算 \  WEB开发  \   ...

  3. python全栈开发 * 32知识点汇总 * 180717

    32 网络编程 (一)一.架构 定义:程序员开发的一种模式. 分类: C/S 架构 C/S即:Client与Server , 客户端/ 服务器模式 . 缺点 : 冗余 B/S 架构 Browser与S ...

  4. python全栈开发 * 12 知识点汇总 * 180530

    12 知识点总结 装饰器进阶 ⼀. 通⽤装饰器的回顾1.开闭原则: 对增加功能开放. 对修改代码封闭2.装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能3.通⽤装饰器的写法:def wrap ...

  5. python全栈开发 * 36知识点汇总 * 180721

    36 操作系统的发展史 进程一.手工操作--穿孔卡片 1.内容: 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制 台开关启动程序针对 ...

  6. python全栈开发 * 31知识点汇总 * 180716

    31 模块和包一.模块(一)模块的种类:内置模块,自定义模块,扩展模块第三方模块(二)自定义模块 1.模块的创建 : 新建一个py文件. 2.模块名 : 模块名需要符合变量的命名规范. 3.模块的导入 ...

  7. python全栈开发 * 24 知识点汇总 * 180705

    24 模块-------序列化一.什么是模块 模块:py文件就是一个模块.二.模块的分类:(1)内置模块 (登录模块,时间模块,sys模块,os模块)(2)扩展模块 (itchat 微信有关,爬虫,b ...

  8. python全栈开发 * 27知识点汇总 * 180710

    27   time  os  sys  模块 time 模块 一.表示时间的三种方式 时间戳(timestamp), 元组(struct_time),格式化时间字符串(Format string) 小 ...

  9. python全栈开发 * 14 知识点汇总 * 180530

    14 生成器表达式 内置函数# 一.迭代器 (补充)# 1.如何判断迭代对象,迭代器# (1).dir(obj)检测对象有没有iter方法,然后it=obj.__iter__() 获取迭代器 , it ...

随机推荐

  1. 安装了 R2 Integration Servic 之后,SQL Server 2008 Management Studio报错

    问题产生 IM数据库服务器未安装Integration Servic,影响备份.在安装了安装了 SQL Server 2008 R2 Integration Servic 之后,SQL Server ...

  2. 为ExecutorService增加shutdown hook

    public class ShutdownHook { private static final ShutdownHook INSTANCE = new ShutdownHook(); private ...

  3. [C#] 将NLog输出到RichTextBox,并在运行时动态修改日志级别过滤

    作者: zyl910 一.缘由 NLog是一个很好用的日志类库.利用它,可以很方便的将日志输出到 调试器.文件 等目标,还支持输出到窗体界面中的RichTextBox等目标. 而且它还支持在运行时修改 ...

  4. 机器人中的轨迹规划(Trajectory Planning )

    Figure. Several possible path shapes for a single joint 五次多项式曲线(quintic polynomial) $$\theta(t)=a_0+ ...

  5. 微信小程序--canvas画布实现图片的编辑

    技术:微信小程序   概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...

  6. ssh的用户配置文件config管理ssh会话

    抄的这个: https://www.cnblogs.com/zhonghuasong/p/7236989.html 只是在这里留个存档,防止删除 我有这样的需求就是,因为需要ssh连接到服务器,然后每 ...

  7. 12款 JavaScript 表格控件(DataGrid)

    JavaScript 表格控件可以操作大数据集的 HTML表格,提供各种功能,如分页.排序.过滤以及行编辑.在本文中,我们整理了13个最好的 JavaScript 表格插件分享给开发人员,开发者可以很 ...

  8. 如何关闭windows server2012 80端口

    Windows Server禁用本地端口的两种方法 这篇文章主要介绍了Windows Server 2008 禁用本地端口的两种方法,本文讲解了通过Windows防火墙禁用端口.通过IP安全策略禁用端 ...

  9. pip 安装出现超时问题的解决

    pip 安装出现超时问题的解决 我们在用默认的pip源进行安装python库时,会出现超时问题下载不了,如下图显示所示: 那么我们应该如何解决呢? 方法: 在自己电脑的  C:\Users\yanji ...

  10. 第四百零四节,python网站第三方登录,social-auth-app-django模块,

    第四百零四节,python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目 ...