標籤:Python全棧 開發 組織 append formatter ESS imp port ...
26 logging collections random 模組
一.logging
低配:日誌不能寫入檔案與顯示同時進行
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(1,2) #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的順序
python全棧開發 * 26知識點匯總 * 180709