學習總結(二十)
阿新 • • 發佈:2019-05-10
並且 asc 字符 error 文件的 log perl正則 cal 底層
import sys
sys.stdin:input的底層
res = sys.stdin.readline()
sys.stdout:print的底層
sys.stdout.write(‘輸出的信息\n‘)
sys.stderr:異常及logging默認打印方式的底層
sys.stderr.write(‘輸出的信息\n‘)
操作日誌的模塊
日誌:日常的流水,將程序運行過程中的狀態或數據進行記錄,一般都是記錄到日誌文件中
在正常的項目中,項目運行的一些打印信息,采用looging打印到文件中,這個過程就稱之為 記錄日誌
import logging # logging為默認打印者,名字叫root,配置采用以下方式 h1 = logging.StreamHandler() h2 = logging.FileHandler(‘d.log‘) logging.basicConfig( # filename=‘my.log‘, # filemode=‘w‘, # stream=sys.stderr, # 往控制臺打印采用具體的輸出流 format=‘%(asctime)s [%(levelname)s]- %(name)s: %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S‘, level=logging.DEBUG, # 10, 代表DEBUG及DEBUG級別以上都能輸出 handlers=[h1, h2] ) logging.debug("debug") logging.info("info") logging.warning("warning") logging.error("error") logging.critical("critical")
1.新建打印者 logger = logging.getLogger("Owen") 2.創建句柄:輸出的位置 stream_handler = logging.StreamHandler() a_file_handler = logging.FileHandler(‘a.log‘) b_file_handler = logging.FileHandler(‘b.log‘) 3.打印者綁定句柄 logger.addHandler(stream_handler) logger.addHandler(a_file_handler) logger.addHandler(b_file_handler) 4.設置格式 fmt1 = logging.Formatter(‘%(asctime)s - %(msg)s‘) fmt2 = logging.Formatter(‘%(asctime)s [%(name)s] - %(msg)s‘) 5.為句柄綁定輸出格式 stream_handler.setFormatter(fmt1) a_file_handler.setFormatter(fmt1) b_file_handler.setFormatter(fmt2) ogger.critical(‘msg‘)
4.logging常用方法
import logging # 1.創建logger log1 = logging.getLogger(‘Owen‘) log2 = logging.getLogger(‘Zero‘) r_log = logging # 2.logger設置級別 log1.setLevel(logging.DEBUG) # 3.設置句柄 h1 = logging.StreamHandler() # 4.設置句柄級別: # 1)系統句柄默認級別warning, # 2)自定義的句柄級別默認同logger,也可以在logger基礎上在加以限制 h1.setLevel(logging.DEBUG) # 5.logger添加句柄 log1.addHandler(h1) # log1可以打印DEBUG以上的信息,但往不同位置打印,采用不同句柄的二次級別限制 h2 = logging.FileHandler(‘c.log‘) h2.setLevel(logging.WARNING) log1.addHandler(h2) log1.debug(‘debug‘) log1.info(‘info‘) log1.warning(‘warning‘) log1.error(‘error‘) log1.critical(‘critical‘) log2.critical(‘00000‘) r_log.critical(‘00000‘)
# 1.配置 LOGGING_DIC = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘formatters‘: { ‘o_fmt1‘: { ‘format‘: ‘%(name)s:%(asctime)s - %(message)s‘ }, ‘o_fmt2‘: { ‘format‘: ‘%(name)s:%(asctime)s [%(levelname)s] - %(message)s‘ } }, ‘filters‘: {}, ‘handlers‘: { ‘o_cmd‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.StreamHandler‘, ‘formatter‘: ‘o_fmt1‘ }, ‘o_file‘: { ‘level‘: ‘WARNING‘, ‘class‘: ‘logging.handlers.RotatingFileHandler‘, ‘formatter‘: ‘o_fmt2‘, ‘filename‘: r‘F:\python8期\課堂內容\day20\代碼\part4\logging.log‘, # 日誌文件 ‘maxBytes‘: 1024*1024*5, # 日誌大小 5M ‘backupCount‘: 5, #日誌文件最大個數 ‘encoding‘: ‘utf-8‘, # 日誌文件的編碼 } }, ‘loggers‘: { ‘o_owen‘: { ‘level‘: ‘DEBUG‘, ‘handlers‘: [‘o_cmd‘, ‘o_file‘] }, ‘o_zero‘: { ‘level‘: ‘DEBUG‘, ‘handlers‘: [‘o_file‘] } } } # 2.加載配置 import logging.config logging.config.dictConfig(LOGGING_DIC) # 3.使用 log = logging.getLogger(‘o_owen‘) log.warning(‘123‘)
一組特殊符號組成的表達式,用於描述某種規則。該應用場景生活中隨處可見。
例如:讓有誌青年過上體面的生活,這裏面就由規則,即有誌青年。
1.用於從字符串中匹配滿足某種規則的內容,多數用於爬蟲應用程序
2.判斷字符串串內容是否滿足某種規則,多用於嚴重用戶輸入。例如密碼是否規範,手機號是否正確等
學習重點
元字符 | 描述 |
---|---|
\ | 將下一個字符標記符、或一個向後引用、或一個八進制轉義符。例如,“\n”匹配\n。“\n”匹配換行符。序列“\”匹配“\”而“(”則匹配“(”。即相當於多種編程語言中都有的“轉義字符”的概念。 |
^ | 匹配輸入字行首。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之後的位置。 |
$ | 匹配輸入行尾。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。 |
* | 匹配前面的子表達式任意次。例如,zo能匹配“z”,也能匹配“zo”以及“zoo”。等價於{0,}。 |
+ | 匹配前面的子表達式一次或多次(大於等於1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。 |
{n} | n是一個非負整數。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個o。 |
{n,} | n是一個非負整數。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等價於“o+”。“o{0,}”則等價於“o*”。 |
{n,m} | m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個o為一組,後三個o為一組。“o{0,1}”等價於“o?”。請註意在逗號和兩個數之間不能有空格。 |
? | 匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等價於{0,1}。 |
? | 當該字符緊跟在任何一個其他限制符(,+,?,{n},{n,},{n,m*})後面時,匹配模式是非貪婪的。非貪婪模式盡可能少地匹配所搜索的字符串,而默認的貪婪模式則盡可能多地匹配所搜索的字符串。例如,對於字符串“oooo”,“o+”將盡可能多地匹配“o”,得到結果[“oooo”],而“o+?”將盡可能少地匹配“o”,得到結果 [‘o‘, ‘o‘, ‘o‘, ‘o‘] |
.點 | 匹配除“\n”和"\r"之外的任何單個字符。要匹配包括“\n”和"\r"在內的任何字符,請使用像“[\s\S]”的模式。 |
x|y | 匹配x或y。例如,“z|food”能匹配“z”或“food”(此處請謹慎)。“[zf]ood”則匹配“zood”或“food”。 |
[xyz] | 字符集合。匹配所包含的任意一個字符。例如,“[abc]”可以匹配“plain”中的“a”。 |
[^xyz] | 負值字符集合。匹配未包含的任意字符。例如,“abc”可以匹配“plain”中的“plin”任一字符。 |
[a-z] | 字符範圍。匹配指定範圍內的任意字符。例如,“[a-z]”可以匹配“a”到“z”範圍內的任意小寫字母字符。註意:只有連字符在字符組內部時,並且出現在兩個字符之間時,才能表示字符的範圍; 如果出字符組的開頭,則只能表示連字符本身. |
[^a-z] | 負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,“a-z”可以匹配任何不在“a”到“z”範圍內的任意字符。 |
\b | 匹配一個單詞的邊界,也就是指單詞和空格間的位置(即正則表達式的“匹配”有兩種概念,一種是匹配字符,一種是匹配位置,這裏的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1”可以匹配“1_23”中的“1”,但不能匹配“21_3”中的“1_”。 |
\B | 匹配非單詞邊界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er” |
\s | 匹配任何不可見字符,包括空格、制表符、換頁符等等。等價於[ \f\n\r\t\v]。 |
\S | 匹配任何可見字符。等價於 \f\n\r\t\v。 |
\w | 匹配包括下劃線的任何單詞字符。類似但不等價於“[A-Za-z0-9_]”,這裏的"單詞"字符使用Unicode字符集。 |
\W | 匹配任何非單詞字符。等價於“A-Za-z0-9_”。 |
\d | 匹配一個數字字符。等價於[0-9]。grep 要加上-P,perl正則支持 |
\D | 匹配一個非數字字符。等價於0-9。grep要加上-P,perl正則支持 |
\n | 匹配一個換行符。等價於\x0a和\cJ。 |
\r | 匹配一個回車符。等價於\x0d和\cM。 |
\t | 匹配一個制表符。等價於\x09和\cI。 |
( ) | 將( 和 ) 之間的表達式定義為“組”(group),並且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多可以保存9個),它們可以用 \1 到\9 的符號來引用。 |
(?:pattern) | 非獲取匹配,匹配pattern但不獲取匹配結果,不進行存儲供以後使用。這在使用或字符“(|)”來組合一個模式的各個部分時很有用。例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的表達式。 |
| | 將兩個匹配條件進行邏輯“或”(Or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。註意:這個元字符不是所有的軟件都支持的。 |
import re res = re.findall("表達式","字符串內容") # 該方法得到一個列表 print(res)
search
僅獲取第一個匹配的內容
match
從字符串開始處開始匹配
compile
得到一個的表達式對象,後期可以重復使用
split
學習總結(二十)