1. 程式人生 > >常用模塊

常用模塊

引號 接口 日誌信息 可執行 line 調試 刪除文件 內部數據 dict

正則表達式:模糊匹配

最常用的匹配語法

1,re.match 從頭開始匹配

2,re.search 匹配包含

3,re.findall 把所有匹配到的字符放到以列表中的元素返回

4,re.split 以匹配到的字符當做列表分隔符

5,re.sub 匹配字符並替換

反斜杠的困擾
與大多數編程語言相同,正則表達式裏使用"\"作為轉義字符,這就可能造成反斜杠困擾。假如你需要匹配文本中的字符"\",那麽使用編程語言表示的正則表達式裏將需要4個反斜杠"\\\\":前兩個和後兩個分別用於在編程語言裏轉義成反斜杠,轉換成兩個反斜杠後再在正則表達式裏轉義成一個反斜杠。Python裏的原生字符串很好地解決了這個問題,這個例子中的正則表達式可以使用r"\\"表示。同樣,匹配一個數字的"\\d"可以寫成r"\d"。有了原生字符串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀。

僅需輕輕知道的幾個匹配模式:

1 2 3 re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同) M(MULTILINE): 多行模式,改變‘^‘‘$‘的行為 S(DOTALL): 點任意匹配模式,改變‘.‘的行為

日誌處理之logging模塊

日誌級別:

debug 最詳細的調試信息 10

info 就想記錄一下 20

warning 出現警告 30

error 出現錯誤 40

crttcal 非常嚴重 50

從大至小,級別越高,數字越大!

技術分享

技術分享

Python 使用logging模塊記錄日誌涉及四個主要類,使用官方文檔中的概括最為合適:

logger提供了應用程序可以直接使用的接口;

handler將(logger創建的)日誌記錄發送到合適的目的輸出(輸出到文件內或屏幕)

filter提供了細度設備來決定輸出哪條日誌記錄(日誌內容哪些輸出,哪些不輸出)

formatter決定日誌記錄的最終輸出格式(日誌格式)

logger
每個程序在輸出信息之前都要獲得一個Logger。Logger通常對應了程序的模塊名,比如聊天工具的圖形界面模塊可以這樣獲得它的Logger:
LOG=logging.getLogger(”chat.gui”)
而核心模塊可以這樣:
LOG=logging.getLogger(”chat.kernel”)

Logger.setLevel(lel):指定最低的日誌級別,低於lel的級別將被忽略。debug是最低的內置級別,critical為最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或刪除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或刪除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以設置的日誌級別

handler

handler對象負責發送相關的信息到指定目的地。Python的日誌系統有多種Handler可以使用。有些Handler可以把信息輸出到控制臺,有些Logger可以把信息輸出到文件,還有些 Handler可以把信息發送到網絡上。如果覺得不夠用,還可以編寫自己的Handler。可以通過addHandler()方法添加多個多handler
Handler.setLevel(lel):指定被處理的信息級別,低於lel級別的信息將被忽略
Handler.setFormatter():給這個handler選擇一個格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個filter對象


每個Logger可以附加多個Handler。接下來我們就來介紹一些常用的Handler:
1) logging.StreamHandler
使用這個Handler可以向類似與sys.stdout或者sys.stderr的任何文件對象(file object)輸出信息。它的構造函數是:
StreamHandler([strm])
其中strm參數是一個文件對象。默認是sys.stderr


2) logging.FileHandler
和StreamHandler類似,用於向一個文件輸出日誌信息。不過FileHandler會幫你打開這個文件。它的構造函數是:
FileHandler(filename[,mode])
filename是文件名,必須指定一個文件名。
mode是文件的打開方式。參見Python內置函數open()的用法。默認是’a‘,即添加到文件末尾。

3) logging.handlers.RotatingFileHandler
這個Handler類似於上面的FileHandler,但是它可以管理文件大小。當文件達到一定大小之後,它會自動將當前日誌文件改名,然後創建 一個新的同名日誌文件繼續輸出。比如日誌文件是chat.log。當chat.log達到指定的大小之後,RotatingFileHandler自動把 文件改名為chat.log.1。不過,如果chat.log.1已經存在,會先把chat.log.1重命名為chat.log.2。。。最後重新創建 chat.log,繼續輸出日誌信息。它的構造函數是:
RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
其中filename和mode兩個參數和FileHandler一樣。
maxBytes用於指定日誌文件的最大文件大小。如果maxBytes為0,意味著日誌文件可以無限大,這時上面描述的重命名過程就不會發生。
backupCount用於指定保留的備份文件的個數。比如,如果指定為2,當上面描述的重命名過程發生時,原有的chat.log.2並不會被更名,而是被刪除。


4) logging.handlers.TimedRotatingFileHandler
這個Handler和RotatingFileHandler類似,不過,它沒有通過判斷文件大小來決定何時重新創建日誌文件,而是間隔一定時間就 自動創建新的日誌文件。重命名的過程與RotatingFileHandler類似,不過新的文件不是附加數字,而是當前時間。它的構造函數是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
其中filename參數和backupCount參數和RotatingFileHandler具有相同的意義。
interval是時間間隔。
when參數是一個字符串。表示時間間隔的單位,不區分大小寫。它有以下取值:
S 秒
M 分
H 小時
D 天
W 每星期(interval==0時代表星期一)
midnight 每天淩晨

技術分享

技術分享

技術分享

sys模塊

技術分享

hashlib加密模塊(用於加密相關的操作,3.x裏代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,md5是不可逆的)

技術分享

技術分享

configparser 用於處理特定格式的文件,其本質上是利用open來操作文件(把所有類型都當做字符串處理)

技術分享

getint 轉換成整數

getfloat 轉換成浮點數

getboolean 轉換成布爾值

技術分享

技術分享

技術分享

xml 是實現不同語言或程序之間進行數據交換的協議(xml是實現不同語言或程序之間進行數據交換的協議,跟json差不多,但json使用起來更簡單,不過,古時候,在json還沒誕生的黑暗年代,大家只能選擇用xml呀,至今很多傳統公司如金融行業的很多系統的接口還主要是xml。)

瀏覽器返回的字符串

1,html

2,json

3, xml

頁面上做展示(字符串類型一個xml格式文件)

配置文件(文件,內部數據xml格式)

導入xml模塊

技術分享

遍歷XML文檔

技術分享

修改

技術分享

刪除

技術分享

添加

技術分享

技術分享

tag 獲取當前節點的標簽名

attrib 或許當前節點的屬性

text 獲取當前節點的屬性

getchlldren 獲取所有的子節點(已經廢棄)

find 獲取第一個尋找到的子節點

findtext 獲取第一個尋找到的子節點的內容

findall 獲取所有的子節點

iterfind 獲取所有指定的節點,並創建一個叠代器(可以被for循環)

每一個節點都是Element對象,

shutill 壓縮模塊(高級的文件,文件夾,壓縮包,處理模塊)

shutill.copyfileobj (將文件內容拷貝至另一個文件)

shutill.copyfile (拷貝文件)

shutill.copymode (僅拷貝權限,內容。組,用戶均不變)

shutill.copystat (僅拷貝狀態的信息)

shutill.copy(拷貝文件和權限)

shutill.copy2(拷貝文件和狀態信息)

shutill.ignore_patterns

shutill.copytree

(遞歸的去拷貝文件夾)

shutill.rmtree(遞歸的去刪除文件)

shuitll.move(遞歸的去移動文件,它類似mv命令,其實就是重命名)

shutill.make_archive(創建解壓縮,並返回文件路徑)

技術分享

技術分享

subprocess模塊(執行系統命令)

獲取狀態碼

shell=false的時候是傳列表

技術分享

shell=true的時候是傳字符串

技術分享

check_all(執行命令,如果狀態碼是0,則返回執行結果,否則拋異常)

check_output(執行命令,如果狀態碼是0,則返回執行結果,否則拋異常)

subprocess.Popen(...)

技術分享

用於執行復雜的系統命令

可用參數:

  • args:shell命令,可以是字符串或者序列類型(如:list,元組)
  • bufsize:指定緩沖。0 無緩沖,1 行緩沖,其他 緩沖區大小,負值 系統緩沖
  • stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄
  • preexec_fn:只在Unix平臺下有效,用於指定一個可執行對象(callable object),它將在子進程運行之前被調用
  • close_sfs:在windows平臺下,如果close_fds被設置為True,則新創建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。
    所以不能將close_fds設置為True同時重定向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。
  • shell:同上
  • cwd:用於設置子進程的當前目錄
  • env:用於指定子進程的環境變量。如果env = None,子進程的環境變量將從父進程中繼承。
  • universal_newlines:不同系統的換行符不同,True -> 同意使用 \n
  • startupinfo與createionflags只在windows下有效
    將被傳遞給底層的CreateProcess()函數,用於設置子進程的一些屬性,如:主窗口的外觀,進程的優先級等等

終端輸入的命令分為兩種:

    • 輸入即可得到輸出,如:ifconfig
    • 輸入進行某環境,依賴再輸入,如:python

time&datatime模塊

技術分享

技術分享

技術分享

random模塊

技術分享

生成隨機驗證碼

技術分享

json&pickle模塊(python的序列化)

技術分享

json只能處理基本的數據類型

技術分享

pickle支持任何類型

json: 用於字符串和python數據類型間進行轉換(更適合跨語言,字符串,基本數據類型)
技術分享
技術分享
通過loads反序列化時,一定要使用雙引號,否則有可能會報錯
技術分享
pickle:  用於python特有的類型和python的數據類型間進行轉換(更適合所有類型的序列化,僅適用於python)

pickle的寫入是二進制形式用wb模式,可以序列化python任何數據類型
json  的寫入是字符串形式用w模式,只支持序列化python的str,int,float,set,list,dict,tuple數據類型,但json可和其他語言序列化

pickle功能: dumps,dump,loads,load
json 功能:  dumps,dump,loads,load
 
序列化和反序列化主要用於動態數據存儲
pickle.dumps 序列化 內存-->硬盤
pickle.loads 反序列化 硬盤-->內存


pickle
如下2個py文件功能是實現數據的動態存檔
這個文件的作用,讀取內存數據寫入到db文件
  1. import pickle
  2. #import json as pickle 這是用json執行 註意把wb改成w
  3. account={
  4. "id":63232223,
  5. "credit":15000,
  6. "balance":8000,
  7. "expire_date":"2020-5-21",
  8. "password":"sdfsf"
  9. }
  10. f=open("account1.db","wb")
  11. f.write(pickle.dumps(account)) #相當於pickle.dump(account,f)
  12. f.close()
這個文件的作用,讀取db文件寫入到內存
  1. import pickle
  2. #import json as pickle 這是用json執行 註意把rb改成r
  3. f=open("account1.db","rb")
  4. account=pickle.loads(f.read())#相當於account=pickle.load(f)
  5. print(account)
  6. print(account["id"])
  7. #可以加如下,執行後註釋 在執行看值是否改變  
  8. account["balance"]-=3400
  9. f=open("account1.db","wb")
  10. f.write(pickle.dumps(account))
  11. f.close()

shelve模塊 比pickle簡單

  1. import shelve
  2. #內存寫入db文件, 字典形式,
  3. f=shelve.open(r‘sheve.txt‘)
  4. f["student1"]={"name":"egon","age":18,"height":"180cm"}
  5. print(f[‘student1‘])
  6. f.close()
  7. #讀取db文件的數據
  8. f=shelve.open(r‘sheve.txt‘)
  9. print(f[‘student1‘])
  10. print(f[‘student1‘]["name"])
  11. f.close()

常用模塊