[010]Python的函數_常用模塊_全棧基礎

您好!此筆記的文本和代碼以網盤形式分享於文末!

因個人能力有限,錯誤處歡迎大家交流和指正!基礎部分內容簡單,但多且零散!

python 常用模塊
1、collections模塊,除內置dict、list、set、tuple數據類型,collections提供了額外的數據類型。
namedtuple: 生成可以使用名字來訪問元素內容的tuple
deque: 雙端隊列,可以快速的從另外一側追加和推出對象
Counter: 計數器,主要用來計數
OrderedDict: 有序字典
defaultdict: 帶有默認值的字典
用法 栗子 結果
namedtuple
表示二維座標
# namedtuple 生成可以使用名字來訪問元素內容的tuple
from collections import namedtuple
import math

# 表示二維座標
point = namedtuple('point', ['x', 'y'])

p = point(1, 2)
print(p.x, p.y)
# 圓心和半徑來表示圓
Circle = namedtuple('Circle', ['x', 'y', 'r'])
c = Circle(1, 2, 5)
c_area = math.pi * math.pow(c.r, 2)
print('圓的面積爲', c_area)
1 2
圓的面積爲 78.53981633974483
deque
高效的插入和刪除
適用於隊列和棧
# 實現了list的append、pop、appendleft、popleft的功能,
# 高效的往頭部添加和刪除元素
from collections import deque

q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
print(q, type(q))
deque(['y', 'a', 'b', 'c', 'x'])
<class 'collections.deque'>
OrderedDict
保持key順序,
方便迭代使用
from collections import OrderedDict

d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od, type(od))

# 按照插入順序返回
od['z'] = 4
od['x'] = 5
od['y'] = 6
print(od)
py3.6後 字典有默認的順序
{'a': 1, 'b': 2, 'c': 3}
OrderedDict([('a', 1), ('b', 2), ('c', 3)]) <class 'collections.OrderedDict'>
OrderedDict([('a', 1), ('b', 2), ('c', 3), ('z', 4), ('x', 5), ('y', 6)])
  # 將集合中所有大於66保存至‘k1’
# 即 {'k1': 大於66 , 'k2': 小於66}
values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]

my_dict = {}

for value in values:
    if value > 66:
        if my_dict.__contains__('k1'):
            my_dict['k1'].append(value)
        else:
            my_dict['k1'] = [value]
    else:
        if my_dict.__contains__('k2'):
            my_dict['k2'].append(value)
        else:
            my_dict['k2'] = [value]

print(my_dict)
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]}
defaultdict
實現上邊的功能
指定了字典的
value值的類型
from collections import defaultdict

values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]

my_dict = defaultdict(list)

for value in values:
    if value > 66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

print(my_dict)
defaultdict(<class 'list'>,
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
  # 引用字典key值,防止不存在保存
from collections import defaultdict

dd = defaultdict(lambda: 'N/A')

dd['key1'] = 'abc'

print(dd['key1'], dd['key2'])
abc N/A
Counter  計數器
記錄元素出現的次數
返回鍵值對無序容器
from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c, type(c))
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
<class 'collections.Counter'>
2、時間模塊time https://www.cnblogs.com/Eva-J/articles/7291842.html  
時間戳是計算機能夠識別的時間;時間字符串是人能夠看懂的時間;元組則是用來操作時間的    
用法 栗子 結果
時間戳
時間字符串
元組
import time

# 獲取時間戳
print(time.time())

# 時間字符串
print(time.strftime("%Y-%m-%d %X"))
print(time.strftime("%Y-%m-%d %H-%M-%S"))

# 時間元組:localtime 將一個時間戳轉換成當時區的
print(time.localtime())
展示結果爲:
1500875844.800804
2017-07-24 13:54:37
2017-07-24 13-55-04
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
          tm_hour=13, tm_min=59, tm_sec=37,
                 tm_wday=0, tm_yday=205, tm_isdst=0)
  # # UTC 倫敦時間
# print(time.gmtime())
# # 當地時間
# print(time.localtime())
 
  # # 時間戳 --> 結構化時間
# # UTC 時間與北京時間差8小時
# print(time.gmtime(1500000000))
# print(time.localtime(1500000000))
 
  # # 結構化時間 --> 時間戳
# time_tuple = time.localtime(1800000000)
# print(time_tuple)
# print(time.mktime(time_tuple))
 
  # # 結構化時間 --> 字符串時間
# # time.strftime("格式定義","結構化時間")
# print(time.strftime("%Y-%m-%d %X"))
# print(time.strftime("%Y-%m-%d", time.localtime(1800000000)))
 
  # # 字符串時間 --> 結構化時間
# # time.strptime(時間字符串,字符串對應格式)
# print(time.strptime("2017-03-16", "%Y-%m-%d"))
# print(time.strptime("03/16/2017", "%m/%d/%Y"))
 
  # # 結構化時間 --> %a %b %d %H:%M:%S %Y串
# # time.asctime(結構化時間) 如果不傳參數,直接返回當前時間的格式化串
# print(time.asctime(time.localtime(1800000000)))
# print(time.asctime())
 
  # # 時間戳 --> %a %b %d %H:%M:%S %Y串
# # time.ctime(時間戳)  如果不傳參數,直接返回當前時間的格式化串
# print(time.ctime())
# print(time.ctime(1800000000))
 
3、random 模塊:import random    
用法 栗子 結果
隨機小數 # 隨機小數 0<x<1
print(random.random())
# 可定範圍,例1<x<3
print(random.uniform(1, 3))
 
隨機整數 # 隨機整數 例1<x<=5
print(random.randint(1, 5))
# 隨機整數 例1<x<=10的奇數 2爲遞增基數
print(random.randrange(1, 10, 2))
# 隨機整數 例0<x<=10的偶數 2爲遞增基數
print(random.randrange(0, 10, 2))
 
隨機返回 # 隨機一個返回
print(random.choice([1, '23', [4, 5]]))
# 指定隨機多個返回,例2個
print(random.sample([1, '23', [4, 5]], 2))
 
打亂列表 # 打亂列表的順序
item = [1, 2, 4, 5, 3, 6]
random.shuffle(item)
print(item)
 
隨機驗證碼
例:生成5位隨機碼
import random


def v_code():
    code = ''
    for i in range(5):
        num = random.randint(0, 9)
        alf = chr(random.randint(65, 90))
        add = random.choice([num, alf])
        code = "".join([code, str(add)])

    return code


print(v_code())
NK4XV
4、OS模塊:os模塊是與操作系統交互的一個接口    
用法 栗子 結果
  # OS 模塊與操作系統交互的一個接口
# 可生成多層遞歸目錄
# os.makedirs('dirname1/dirname2')
# 若目錄爲空,則刪除,並遞歸到上一級目錄,
# 如若也爲空,則刪除,依此類推
# os.removedirs('dirname1')
# 生成單級目錄;相當於shell中mkdir dirname
# os.mkdir('dirname')
# 刪除單級空目錄,若目錄不爲空則無法刪除,報錯;
# os.rmdir('dirname') 
# 列出指定目錄下的所有文件和子目錄,
# 包括隱藏文件,並以列表方式打印
# os.listdir('dirname')
# 刪除一個文件
# os.remove()
# 重命名文件/目錄
# os.rename("oldname","newname")
# 獲取文件/目錄信息
# os.stat('path/filename')
# 運行shell命令 直接顯示
# os.system('bash command')
# 運行shell命令,獲取執行結果
# os.popen("bash command).read()
 
  # 獲取當前工作目錄
print(os.getcwd())
# 改變當前腳本工作目錄;相當於shell下cd
os.chdir(r'E:\pytext\003')
print(os.getcwd())
os.chdir(r'E:\pytext\002')
print(os.getcwd())

E:\pytext\002
E:\pytext\003
E:\pytext\002
os.path 模塊 # 返回path規範化的絕對路徑
# os.path.abspath(path)
# 將path分割成目錄和文件名二元組返回
# os.path.split(path)
# 返回path的目錄。其實就是os.path.split(path)的第一個元素
# os.path.dirname(path)
# 返回path最後的文件名。如何path以/或\結尾,
# 那麼就會返回空值。即os.path.split(path)的第二個元素
# os.path.basename(path)
# 如果path存在,返回True;如果path不存在,返回False
# os.path.exists(path)
# 如果path是絕對路徑,返回True
# os.path.isabs(path)
# 如果path是一個存在的文件,返回True。否則返回False
# os.path.isfile(path)
# 如果path是一個存在的目錄,則返回True。否則返回False
# os.path.isdir(path)
# 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
# os.path.join(path1[, path2[, ...]])
# 返回path所指向的文件或者目錄的最後訪問時間
# os.path.getatime(path)
# 返回path所指向的文件或者目錄的最後修改時間
# os.path.getmtime(path)
# 返回path的大小
# os.path.getsize(path)
 
stat 結構: st_mode: inode 保護模式
st_ino: inode 節點號。
st_dev: inode 駐留的設備。
st_nlink: inode 的鏈接數。
st_uid: 所有者的用戶ID。
st_gid: 所有者的組ID。
st_size: 普通文件以字節爲單位的大小;
包含等待某些特殊文件的數據。
st_atime: 上次訪問的時間。
st_mtime: 最後一次修改的時間。
st_ctime: 由操作系統報告的"ctime"。
在某些系統上(如Unix)是最新的元數據更改的時間,
在其它系統上(如Windows)是創建時間
 
  # # 輸出操作系統特定的路徑分隔符
print(os.sep)
# # 輸出當前平臺使用的行終止符
print(os.linesep)
# 輸出用於分割文件路徑的字符串
print(os.pathsep)
# 輸出字符串指示當前使用平臺
print(os.name)
\


;
nt
5、sys模塊是與python解釋器交互的一個接口    
     
  # 返回操作系統平臺名稱
print(sys.platform)
 
  # # 獲取Python解釋程序的版本信息
print(sys.version)
 
  # # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
print(sys.path)
 
sys.argv    
6、序列化:將原本的字典、列表等內容轉換成一個字符串的過程就叫做序列化    
序列化目的:1>以某種存儲形式使自定義對象持久化;
2>將對象從一個地方傳遞到另一個地方。
3>使程序更具維護性
   
json,用於字符串 和 python數據類型間進行轉換    
json是一種所有的語言都可以識別的數據結構。    
pickle,用於python特有的類型 和 python的數據類型間進行轉換    
用法 栗子 結果
json
字典轉換成字符串
loads和dumps
# # 將一個字典轉換成一個字符串
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
str_dic = json.dumps(dic)
print(str_dic, type(str_dic))
# 反序列化:將字符串格式的字典轉化爲字典
dic2 = json.loads(str_dic)
print(dic2, type(dic2))
{"k1": "v1", "k2": "v2", "k3": "v3"} <class 'str'>
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>
json
dump和load
# dump 接收文件句柄,直接將字典轉成json字符串寫入文件
import json
f = open('json_file', 'w')
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
json.dump(dic, f)
f.close()
# load接收文件句柄,將文件中的json字符串轉成數據結構
f = open('json_file')
dic2 = json.load(f)
f.close()
print(dic2, type(dic2))
json_file文件及內容


{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} <class 'dict'>
json
dumps
ensure_ascii參數
import json
f = open('file', 'w')
json.dump({'國籍': '中國'}, f)
ret = json.dumps({'國籍': '中國'})
f.write(ret+'\n')
json.dump({'國籍': '美國'}, f, ensure_ascii=False)
ret = json.dumps({'國籍': '美國'}, ensure_ascii=False)
f.write(ret+'\n')
f.close()
 
其他參數    
json
Json的格式化輸出
 indent 空幾格
import json
data = {'username': ['李華', '二愣子'], 'sex': 'male', 'age': 16}
json_dic2 = json.dumps(data, sort_keys=True, indent=2, separators=(',', ':'), ensure_ascii=False)
print(json_dic2)
{
  "age":16,
  "sex":"male",
  "username":[
    "李華",
    "二愣子"
  ]
}
pickle
dumps 和 loads
import pickle
# dumps
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
str_dic = pickle.dumps(dic)
# 轉成bytes類型數據
print(str_dic, type(str_dic))
# loads 反序列化、讀
dic2 = pickle.loads(str_dic)
print(dic2)
b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.' <class 'bytes'>
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
pickle
dump和lload
import time

struct_time = time.localtime(1800000000)
print(struct_time)
f = open('pickle_file', 'wb')
# dump 序列化存
pickle.dump(struct_time, f)
f.close()

# load(不僅可以序列化字典,列表...
# 還可以把python中任意的數據類型序列化)
f = open('pickle_file', 'rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)
 
7、re模塊:正則表達式方法模塊,擁有全部的正則表達式功能   <------獲取匹配的函數
group(num=0) 匹配的整個表達式的字符串,group() 可以一次輸入多個組號,
在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回包含所有小組字符串的元組,從1到所含的小組
groupdict() 返回以有別名的組的別名爲鍵、以該組截獲的子串爲值的字典
start()  返回匹配開始的位置
end() 返回匹配結束的位置
span()  返回一個元組包含匹配(開始,結束)的位置
     
     
     
findall  # findall 返回所有滿足匹配條件的結果,放在列表
"""
findall(pattern, string, flags=0):
    pattern:匹配的正則表達式
    string:要匹配的字符串
    flags:標記爲,用於控制正則表達式的匹配方式
"""
ret = re.findall('l', 'lion simba trglion')
print(ret)
['l', 'l']
findall 的優先級查詢 ret = re.findall('www.(baidu|csdn).com', 'www.csdn.com')
print(ret)
# 如果想要匹配結果,取消權限即可
ret = re.findall('www.(?:baidu|csdn).com', 'www.csdn.com')
print(ret)
['csdn']
['www.csdn.com']
finditer # finditer返回所有滿足RE的結果,存放結果在迭代器
"""
finditer(pattern, string, flags=0)
    pattern:匹配的正則表達式
    string:要匹配的字符串
    flags:標記爲,用於控制正則表達式的匹配方式
"""
ret = re.finditer('\d', 'ds3sy4784a')
print(ret)
print(next(ret).group())
print(next(ret).group())
print([i.group() for i in ret])
<callable_iterator object at 0x0000022C0CFDD358>
3
4
['7', '8', '4']
search  # search 掃描整個字符串並返回第一個成功的匹配
"""
search(pattern, string, flags=0)
    pattern:匹配的正則表達式
    string:要匹配的字符串
    flags:標記爲,用於控制正則表達式的匹配方式   
"""
ret = re.search('l', 'lion simba trglion')
ret1 = re.search('l', 'lion simba trglion').group()
# 如果字符串沒有匹配會報錯
# ret2 = re.search('c', 'lion simba trglion').group()
ret3 = re.search('c', 'lion simba trglion')
print(ret, '\nret1:', ret1, '\nret3:', ret3)
<_sre.SRE_Match object; span=(0, 1), match='l'>
ret1: l
ret3: None
match # match 從字符串的起始位置匹配,
# 如果起始位置匹配不成功的話,match()就返回none
"""
match(pattern, string, flags=0)
    pattern:匹配的正則表達式
    string:要匹配的字符串
    flags:標記爲,用於控制正則表達式的匹配方式 
"""
ret = re.match('a', 'abc')
ret1 = re.match('a', 'abc').group()
ret2 = re.match('b', 'abc')
print(ret, '\nret1:', ret1, '\nret2:', ret2)
<_sre.SRE_Match object; span=(0, 1), match='a'>
ret1: a
ret2: None
split # split 按照匹配的子串將字符串分割後返回列表
"""
split(pattern, string, maxsplit=0, flags=0)
    pattern:匹配的正則表達式
    string:要匹配的字符串
    maxsplit: 分割次數,默認爲0 不限制次數
    flags:標記爲,用於控制正則表達式的匹配方式
"""
ret = re.split('[ab]', 'abcd')
ret1 = re.split('[ab]', 'abcd', 1)
ret2 = re.split('[ab]', 'aAcd')
# re.I 是正則表達式修飾符,使匹配對大小寫不敏感
ret3 = re.split('[ab]', 'aAcd', flags=re.I)
print('ret:', ret, '\nret1:', ret1, '\nret2:', ret2, '\nret3:', ret3,)
ret: ['', '', 'cd']
ret1: ['', 'bcd']
ret2: ['', 'Acd']
ret3: ['', '', 'cd']
split的優先級查詢 # split的優先級查詢 有無() 的結果大不同

ret = re.split("\d+", "eva3egon4yuan")
print(ret)

ret = re.split("(\d+)", "eva3egon4yuan")
print(ret)
['eva', 'egon', 'yuan']
['eva', '3', 'egon', '4', 'yuan']
sub # sub 替換匹配到的字符串
"""
sub(pattern, repl, string, count=0, flags=0)
    pattern:匹配的正則表達式
    repl:替換爲字符串,也可作爲一個函數
    string:要匹配的字符串
    count:模式匹配後替換的最大次數,默認0表示替換所有匹配
    flags:標記爲,用於控制正則表達式的匹配方式

"""
ret = re.sub('\d', 'H', 'eva3egon4yuan4', 1)
print('ret :', ret)
ret1 = re.sub('\d', 'h', ret, 1)
print('ret1:', ret1)
ret2 = re.sub('a', 'W', ret, 3)
print('ret2:', ret2)
ret3 = re.sub('H', '5', ret1)
print('ret3:', ret3)
ret4 = re.sub('H', '5', ret1, flags=re.I)
print('ret4:', ret4)
ret : evaHegon4yuan4
ret1: evaHegonhyuan4
ret2: evWHegon4yuWn4
ret3: eva5egonhyuan4
ret4: eva5egon5yuan4
subn # subn 替換匹配到的字符串返回元組(替換結果,替換次數)
"""
subn(pattern, repl, string, count=0, flags=0)
"""
ret = re.subn('\d', 'H', 'eva3egon4yuan4')
print(ret)
('evaHegonHyuanH', 3)
compile # compile 編譯正則表達式,生成一個正則表達式(Pattern)對象
# 供 match() 和 search() 這兩個函數使用
"""
compile(pattern, flags=0):
"""
# 將正則表達式編譯成爲一個 正則表達式對象,規則要匹配的是3個數字
obj = re.compile('\d{3}')
obj = re.compile('\d{2}')
# 正則表達式對象調用search,參數爲待匹配的字符串
ret = obj.search('4a5b6c123eeee')
ret1 = obj.match('4a5b6c123eeee')
ret3 = obj.match('44a5b6c123eeee')
print(ret.group(), ret1, ret3.group())
12 None 44
練習    
8、hashlib模塊:提供了常見的摘要算法,如MD5,SHA1等,摘要算法又稱哈希算法、散列算法    
# MD5值計算 # MD5值計算
m = hashlib.md5()
m.update("ling".encode("utf-8"))
print(m.hexdigest())
# md5計算
nm5 = hashlib.new('md5', "ling".encode("utf-8")).hexdigest()
print(nm5)
# ‘加鹽’
m1 = hashlib.md5("1234567".encode("utf-8"))
m1.update("ling".encode("utf-8"))
print(m1.hexdigest())

# sha1計算
hs = hashlib.sha1()
hs.update("ling".encode("utf-8"))
print(hs.hexdigest())

# sha256 計算
hs1 = hashlib.sha256()
hs1.update("ling".encode("utf-8"))
print(hs1.hexdigest())

# hmac的使用
h = hmac.new("1234567".encode("utf-8"), "ling".encode("utf-8"), digestmod='md5')
print(h.hexdigest())
h1 = hmac.new("1234567".encode("utf-8"))
h1.update("ling".encode("utf-8"))
print(h1.hexdigest())
24c10be286b009f797d53126790fcfd8
24c10be286b009f797d53126790fcfd8
adf67c5212bc655192931cb54efd3111
3275142b880fd39f1dbd64201d4e22e370d61f98
6cd4c9c389b460a1f60357bebdec27a788c4abbf1aa3dead4d3c0cfd0cebea2a
1154278ab2838e38d54270bcbaedf989
1154278ab2838e38d54270bcbaedf989
9、configparser模塊:    
  # 生成配置文檔
config = configparser.ConfigParser()

config["DEFAULT"] = {'ServerAliveInterval': '45',
                     'Compression': 'yes',
                     'CompressionLevel': '9',
                     'ForwardX11': 'yes'
                     }

config['bitbucket.org'] = {'User': 'hg'}

config['topsecret.server.com'] = {'Host Port': '50022', 'ForwardX11': 'no'}

with open('example.ini', 'w') as configfile:
    config.write(configfile)
[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = 9
forwardx11 = yes

[bitbucket.org]
user = hg

[topsecret.server.com]
host port = 50022
forwardx11 = no
  # 讀取和查找文件
# 查找文件內容,基於字典的形式
config = configparser.ConfigParser()
print(config.sections())
# 讀取
config.read('example.ini')
print(config.sections())
print('bytebong.com' in config)
print('bitbucket.org' in config)
print(config['bitbucket.org']["user"])
print(config['DEFAULT']['Compression'])
print(config['topsecret.server.com']['ForwardX11'])
print(config['bitbucket.org'])
# 注意,有default會默認default的鍵
for key in config['bitbucket.org']:
    print(key)

print(config.options('bitbucket.org'))  # 同for循環
# 找到'bitbucket.org'下所有鍵值對
print(config.items('bitbucket.org'))
# get方法Section下的key對應的value
print(config.get('bitbucket.org','compression'))
[]
['bitbucket.org', 'topsecret.server.com']
False
True
hg
yes
no
<Section: bitbucket.org>
user
serveraliveinterval
compression
compressionlevel
forwardx11
['user', 'serveraliveinterval', 'compression', 'compressionlevel', 'forwardx11']
[('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', '9'), ('forwardx11', 'yes'), ('user', 'hg')]
yes
未成功 # 增刪改操作
config = configparser.ConfigParser()

config.read('example.ini')
config.add_section('yuan')

config.remove_section('bitbucket.org')
config.remove_option('topsecret.server.com', "forwardx11")

config.set('topsecret.server.com', 'k1', '11111')
config.set('yuan', 'k2', '22222')

config.write(open('new2.ini', "w"))
 
10、logging日誌模塊    
  函數 說明
  logging.debug(msg, *args, **kwargs) 創建一條嚴重級別爲DEBUG的日誌記錄
  logging.info(msg, *args, **kwargs) 創建一條嚴重級別爲INFO的日誌記錄
  logging.warning(msg, *args, **kwargs) 創建一條嚴重級別爲WARNING的日誌記錄
  logging.error(msg, *args, **kwargs) 創建一條嚴重級別爲ERROR的日誌記錄
  logging.critical(msg, *args, **kwargs) 創建一條嚴重級別爲CRITICAL的日誌記錄
  logging.log(level, *args, **kwargs) 創建一條嚴重級別爲level的日誌記錄
  logging.basicConfig(**kwargs) 對root logger進行一次性配置
     
     
  """
日誌級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG
默認只顯示了大於等於WARNING級別的日誌,
"""
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message') 
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
 logging.basicConfig() #  logging.basicConfig()函數調整日誌級別、輸出格式
logging.basicConfig(level=logging.DEBUG,
                    format="%(asctime)s %(name)s %(levelname)s %(message)s",
                    datefmt='%Y-%m-%d  %H:%M:%S %a'
                    )
logging.debug("msg1")
logging.info("msg2")
logging.warning("msg3")
logging.error("msg4")
logging.critical("msg5")
 
  # 生成日誌文件
# 配置輸出日誌格式
LOG_FORMAT = "%(asctime)s %(name)s %(levelname)s %(pathname)s %(message)s"
# 配置輸出時間的格式,注意月份和天數
DATE_FORMAT = '%Y-%m-%d  %H:%M:%S %a'
# 利用filename參數將日誌內容直接寫入文件
logging.basicConfig(level=logging.DEBUG,
                    format=LOG_FORMAT,
                    datefmt=DATE_FORMAT,
                    filename=r"E:/pytext/002/test.log"
                    )
logging.debug("msg1")
logging.info("msg2")
logging.warning("msg3")
logging.error("msg4")
logging.critical("msg5")
 
日誌的切割  
     
logging模塊中定義好的可以用於format格式字符串說明
字段/屬性名稱 描述 使用格式
asctime 將日誌的時間構造成可讀的形式,默認情況下是‘2016-02-08 12:00:00,123’精確到毫秒 %(asctime)s
name 所使用的日誌器名稱,默認是'root',因爲默認使用的是 rootLogger %(name)s
filename 調用日誌輸出函數的模塊的文件名; pathname的文件名部分,包含文件後綴 %(filename)s
funcName 由哪個function發出的log, 調用日誌輸出函數的函數名 %(funcName)s
levelname 日誌的最終等級(被filter修改後的) %(levelname)s
message 日誌信息, 日誌記錄的文本內容 %(message)s
lineno 當前日誌的行號, 調用日誌輸出函數的語句所在的代碼行 %(lineno)d
levelno 該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50) %(levelno)s
pathname 完整路徑 ,調用日誌輸出函數的模塊的完整路徑名,可能沒有 %(pathname)s
process 當前進程, 進程ID。可能沒有 %(process)s
processName 進程名稱,Python 3.1新增 %(processName)s
thread 當前線程, 線程ID。可能沒有 %(thread)s
threadName 線程名稱 %(thread)s
module 調用日誌輸出函數的模塊名, filename的名稱部分,不包含後綴即不包含文件後綴的文件名 %(module)s
created 當前時間,用UNIX標準的表示時間的浮點數表示; 日誌事件發生的時間--時間戳,就是當時調用time.time()函數返回的值 %(created)f
relativeCreated 輸出日誌信息時的,自Logger創建以 來的毫秒數; 日誌事件發生的時間相對於logging模塊加載時間的相對毫秒數 %(relativeCreated)d
msecs 日誌事件發生事件的毫秒部分。logging.basicConfig()中用了參數datefmt,將會去掉asctime中產生的毫秒部分,可以用這個加上 %(msecs)d
元字符    
量詞 量詞用法說明
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
 

願有更多的朋友,在網頁筆記結構上分享更邏輯和易讀的形式:

鏈接:暫無
提取碼:暫無

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章