python中logging模塊詳解,python模塊-logging和collections以及random模塊

 2023-12-06 阅读 28 评论 0

摘要:主要內容: 1.logging高級 2.collections?模塊 3.random模塊 ? ? 1.logging高級 logging基本的示例如下: import logging logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s (line:%(lineno)d) %(levelname)s %(message)s',filename&

主要內容:

1.logging高級

2.collections?模塊

3.random模塊

?

?

1.logging高級

logging基本的示例如下:

import logging
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s (line:%(lineno)d) %(levelname)s %(message)s',filename="log.log",filemode= "w")try:s = input(">>>>>>>")p = int(s)
except ValueError as e:logging.debug(e)logging.info(e)logging.warning(e)logging.error(e)logging.critical(e)

低級的有個問題,就是不能同時屏幕和文件同時輸出.

高級是支持的.示例如下:

import logging
logger = logging.getLogger()   # 創建logger對象.
logger.setLevel(logging.DEBUG)fh = logging.FileHandler("test1.log",encoding="utf-8")  #創建文件句柄
ch = logging.StreamHandler()  #產生了一個屏幕句柄

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)   # 設置文件的格式  (這兩個按照需求可以單獨設置)
ch.setFormatter(formatter)    # 設置屏幕格式
logger .addHandler(fh)    #  添加文件句柄
logger.addHandler(ch)    #添加屏幕句柄
fh.setLevel(logging.INFO)
ch.setLevel(logging.INFO)    #如果你對logger對象設置日志等級.那么文件和屏幕都設置了.
# #總開關 默認從warning開始,如果想設置分開關:必須要從他更高級:(ERROR,critical)從這來個開始.
#

?

?

?

2.collections?模塊

collections 模塊給你提供的就是一些特殊的數據類型.

?

?namedtuple??

namedtuple是一個函數,它用來創建一個自定義的tuple對象,并且規定了tuple元素的個數,并可以用屬性而不是索引來引用tuple的某個元素。

這樣一來,我們用namedtuple可以很方便地定義一種數據類型,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便

示例:

from collections import namedtuple
point = namedtuple("Point",["x","y"])
p = point(1,2)
print(p.x)

deque? 雙向隊列

使用list存儲數據時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為list是線性存儲,數據量大的時候,插入和刪除效率很低。

deque是為了高效實現插入和刪除操作的雙向列表,適合用于隊列和棧:

from collections import deque
q = deque([1,2,3])
q.append("天氣")
q.appendleft("不好")
q.pop()
q.popleft()
print(q)

?

defaultdict? ?

使用dict時,如果引用的Key不存在,就會拋出KeyError。如果希望key不存在時,返回一個默認值,就可以用defaultdict

注意默認值是調用函數返回的(這里是必須的),而函數在創建defaultdict對象時傳入。

除了在Key不存在時返回默認值,defaultdict的其他行為跟dict是完全一樣的。

?

lst = [11,22,33,44,55,66,77,88,99,90]
from collections import defaultdict
dic = defaultdict(list)
for i in lst:if i > 66:dic["k1"].append(i)else:dic["k2"].append(i)
print(dic)

以及如下示例:

from collections import defaultdict
dic = defaultdict(lambda : 5)
# for i in lst:
#     if i > 66:
#         dic["k1"].append(i)
#     else:
#         dic["k2"].append(i)
# print(dic)for i in range(1,21):dic[i] = 5
print(dic)

?

?

Counter? 統計每個元素出現的次數

如下示例:

from collections import Counter
c = Counter('abcdeabcdabcabafkjdslajlkfd')
print(c)"""
運行結果如下:
Counter({'a': 6, 'b': 4, 'd': 4, 'c': 3, 'f': 2, 'k': 2, 'j': 2, 'l': 2, 'e': 1, 's': 1})
"""

OrderedDict

使用dict時,Key是無序的。在對dict做迭代時,我們無法確定Key的順序。

如果要保持Key的順序,可以用OrderedDict

from collections import OrderedDict
dic = OrderedDict()
dic["a"] =1
dic["b"] = 2
dic["c"] = 3
print(dic.keys())

?

?

3.random?模塊

?

import random
print(random.random())   # 0~1 之間的小數
print(random.uniform(1,6))  #  1~3小數
print(random.randint(1,10)) # 1<=x<=10  整數
print(random.randrange(1,10,2))     # 1<=x<10 的奇數 顧首不顧尾
print(random.choice([1,"好人",[1,2,3]])) # 任選擇一個,常用 ,這個里面的變量是可索引的變量,比如列表,元組,或者字符
print(random.sample([1,"好人",[1,2,3]],2)) #任選擇兩個
item = [i for i in range(1,14)]
print(item)
random.shuffle(item)   #打亂順序,注意這里是打亂原有列表,不是返回值是打亂的.返回為none
print(item)

?

兩個小作業

# 1題:4位,全數字的隨機驗證碼
# 2題:4位,數字與字母(不區分)相結合的隨機驗證碼.

?

個解決思路如下:

p = random.random()
s = str(p)
m = s[2:6]
print(m)lst = [i for i in range(10) ]
s = [chr(i)  for i in range(65,91)]
lst.extend(s)
lst_tmp =[]
for i in range(4):lst_tmp.append(random.choice(lst))
print(lst_tmp)

?

轉載于:https://www.cnblogs.com/ahliucong/p/9286091.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/191096.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息