Python常用的內建模組 - 程式人生

文章推薦指數: 80 %
投票人數:10人

引用其他模組,包含python內建模組和其他第三方模組; 避免函式名和變數名等名稱衝突。

模組的匯入方式. import. 直接使用import語句匯入標準 ... 程式人生>>Python常用的內建模組 Python常用的內建模組 阿新••發佈:2019-01-22 模組: 計算機在開發過程中,程式碼越寫越多,也就也來越難以維護,所以為了編寫可維護的程式碼,我們會把函式進行分組,放在不同的檔案裡。

在python裡,一個.py檔案就是一個模組。

模組的優點: 提高程式碼的可維護性。

提高程式碼的複用,當模組完成時就可以在其他程式碼中呼叫。

引用其他模組,包含python內建模組和其他第三方模組 避免函式名和變數名等名稱衝突。

模組的匯入方式 import 直接使用import語句匯入標準庫的模組: importsys print(sys.argv)        #包含命令列引數的列表 print(sys.path)        #自動查詢所需模組的路徑列表 import語句: 格式:importmodule1[,module2] 注意:一個模組只會被匯入一次,不管執行了多少次import,防止一次次的匯入記憶體中浪費記憶體 使用模組中的內容:     module.方法/變數/類 from……import…… 作用:從模組中匯入一個指定的部分 格式:frommodulenameimportname…from……import* 作用:從模組中所有內容全部匯入當前名稱空間 注意:不應該過多的使用,佔用記憶體太多了。

容易導致變數的衝突 #注意!!兩個匯入包的區別,以time為例 importtime#第一種 time.sleep(0) fromtimeimporttime#第二種 time.sleep(0) fromtimeimport*#第三種 sleep(0) """兩個在匯入之後都可以呼叫sleep但是呼叫的方法書寫格式不同,第一種和第二種是要寫上包名,而第三種直接寫方法名, 但是在我們日常編寫中,我們都是採用前兩種種方式,以防止在程式碼塊中命名的重複,和降低程式碼閱讀的難度 注意如果想要在兩個包中能夠互相呼叫的話,採用第一種方式,這種情況一般都是用到自己寫的包的互相呼叫中 """ 模組中的__name__屬性: 每個模組都有一個__name__屬性,當其值為“__main__”時,表明該模組自身在執行, 否則是被當做模組引入,此時值為模組的名字 作用:模組就是一個可執行的python檔案,一個模組被另一個模組引入,想讓模組中的 某一程式不執行,我們可以用__name__屬性來使程式隱藏該塊內碼,當自身執行時,在執行‘該塊程式碼 一般程式的其實位置都是從__name__=="__main__"開始 包: 為了避免模組名的衝突,python又引入了按目錄來組織模組的方方稱為包(package) 特點:引入包以後,值頂層的包名不予別人衝突,那麼所有的模組都不會與比人衝突 注意:每個包下面都會有一個名為__init__.py的檔案,可以匯出包裡的內容 from包import(可以是方法名字只不過需要有init檔案也可以是模組的名字) 如果包裡面的模組相同了 from包.模組import方法 如果方法也相同了 from包.模組import方法as變數  #給其重新命名之後再去操作。

內建模組: time模組: UTC(世界協調時間):格林尼治時間,世界標準時間。

在中國我們UTC+8 DST(夏令時):是一種為了節約能源而人為規定地方時間的制度,一般在天亮早的夏季將時間提前一小時,時間段表示形式: 1.時間戳 以整型或者浮點型表示的是一個一秒為單位的時間間隔,這個時間的基礎是1970年的1月1日零時開始算  2.元組形式 一種python的資料表示,這個元組有9個整形元素,分別表示不同的時間含義 yearmonth(1-12)day(1-31)hours(0-23)minutes(0-59)seconds(0-59)weekday(0-60為週一) Julianday(1-366):表示當前日期在本年是第幾天,dayintheyear DSTflag(-1or0or1):夏令時格式,0表示正常格式,1表示為夏令時格式,-1表示根據當前的日期時間格式來判定 3.格式化字串 %a     本地簡化星期名稱 %A     本地完整星期名稱 %b     本地簡化月份名稱 %B     本地完整月份名稱 %c     本地相應的日期和時間表示 %d     一個月中第幾天(01-31) %H     一天中的第幾個小時(24小時制度,00-23) %I     一天中的第幾個小時(12小時制度,01-12) %j     一年中的第幾天(001-366) %m     月份(01-12) %M     分鐘數(00-59) %p     本地am或者pm的相應符號 %S     秒(00-59) %U     一年中的星期數,以星期日為一個星期 %w     一個星期中的第幾天(0-6,0表示星期日) %W     和%U基本相同,以星期一為一個星期 %x     本地相應日期 %X     本地相應時間 %y     去掉世紀的年份(00-99) %Y     完整的年份 %Z     時區的名字,如果不存在未空字串 方法: time():返回房錢的時間戳,浮點數形式,無須傳參 t1=time.time() gmtime():將時間戳轉換為UTC時間元組格式,接收一個浮點型時間戳為引數,如果不傳預設為當前時間的時間戳      t2=time.gmtime() localtime():將時間戳轉換為本地時間元組格式,接收一個浮點型時間戳為引數,如果不傳預設為當前時間的時間戳    t3=time.localtime() mktime():將本地時間元組轉為時間戳,接收一個時間元組 t4=time.mktime(t3) asctime():將時間元組格式轉為字串形式,接收一個時間元組,不傳預設為localtime時間的時間元組              t5=time.asctime(t3) ctime():將時間戳轉為字串,接收一個時間戳,預設值為當前時間戳 t6=time.ctime() strftime():將時間元組以指定的格式轉換字串格式沒接收一個字串格式化串,時間元組,不寫預設為localtime() t7=time.strftime("%Y-%m-%d%X",t3) strptime():將指定格式的時間字串解析為時間元組,是strftime逆過程,t8=time.strptime()  sleep():延遲一個時間段,整型或者浮點型 clock():返回當前程式執行時間,Unix系統時鐘返回全部執行時間,而windos從第二次開始都是以第一次呼叫次函式的時間戳為基準,而不是程式開始時間為基準。

tzset():改變本地時區      datetime模組 比time高階了不少,可以理解為datetime基於time進行了封裝,提供了更實用的函式介面 datetime模組的介面更直觀,更容易呼叫。

模組中的類: datetime   同時有時間和日期 timedelta  主要用於計算時間跨度 tzinfo     時區相關 time  只關注時間 date  只關注日期 獲取當前時間 t1=datetime.datetime.now()  獲取指定時間 t2=datetime.datetime(199,10,1,8,8,8,0) 將時間轉為字串 t3=t1.strftime("%Y-%m-%d%X") 將格式化字串轉為datetime物件 t4=datetime.datetime.strptime(t3,"%Y-%m-%d%X") 時間相減,返回一個時間間隔 t5=datetime.datetime(199,10,1,8,8,8,0) t6=datetime.datetime(199,10,2,8,8,8,0) t7=t6-t5 天數和時間都告訴了t7.days間隔天數t7.second出去天數的秒數 日曆模組calendar calendar.month(2018,8)返回某年某月 calendar.calendar(2018)返回某一年的 calendar.isleap()判斷是否是閏年 calendar.monthrange(2018,8)返回某個月的weekday的第一天開始星期和這個月的所有天數 calendar.monthcalendar(2018,8)返回的是這個月的序列沒有的就是0 collections模組 python內建的一個集合模組,提供了許多有用的集合類 namedtuple(): 命名元組,本質是是一個函式,用它來建立一個自定義的tuple物件 規定tuple元素的個數,並可以用屬性而不是索引來引用tuple中的元素,用namedtuple定義一個新的資料型別 fromcollectionsimportnamedtuple Point=namedtuple("Point",["x","y"]) point=Point(1,2) print(point.x,point.y) defaultdict(): 在使用dict時,如果引用的key不存在,會丟擲KeyError異常,如果希望key不存在時,也能得到一個預設的值,就使用defautdict fromcollectionsimportdefaultdict d2=defaultdict(lambda:"XiaoHa")#預設值不存在就會得到裡面的值 d2["a"]=1 print(d2) print(d2["a"]) print(d2["d"]) print(d2.get("d")) 除了key值不存在時,返回的是自己設定的值外其他的都和普通的dict方法運用相同。

OrdereDict(): 我們平時使用dict時,key值的存放是無序的,對dict進行的帶時,無法儲存key的順序。

如果需要key值的有序性,就使用OrdereDict fromcollectionsimportOrdereDict d3=OrdereDict{[("a",[11,111]),("b","22"),("c","33")]} print(d3) print(d3["a"]) print(d3.get("a"))#字典的順序是按照存入時鍵值對的順序,其中也可以放入列表。

Counter(): Counter就是一個簡單的計數器,本質上是dict的一個子類,對列表中字串某個元素在列表中出現的數字統計,在對文章分析的時候這個會用到。

fromcollectionsimportCounter a="XiaoHasayhelloworld" c=Counter() print(c)#一個Counter型別的 forchina: c[ch]=c[ch]+1#對每個資料進行讀取一遍,然後再對其進行賦值得到個數 print(c) uuid模組: 是一個128位的位元組的全域性唯一識別符號,通常由32位元組的字母穿表示,它可以保證時間和空間的唯一性,也稱為GUID 原理: 通過MAC地址、時間戳、名稱空間、隨機數、偽隨機數保證生成的ID的唯一性。

作用: 隨機生成字串,當成token使用,當成訂單號使用(要求不相同的字串) 演算法: 1、uuid1():基於時間戳的演算法 由MAC地址、當前時間戳、隨機陣列成,可以保證全球範圍沒的唯一性,但是由於MAC地址的使用時帶來的安全問題,區域網可以使用IP來代替MAC 2.、uuid2():基於分散式計算環境DCE的演算法 演算法和uuid1相同,但是不用的是把時間戳的前四位換為POSIX的UID,實際當中很少使用,在python中沒有這個函式。

3、uuid3():基於名字和MD5雜湊值的演算法 通過計算名字和名稱空間的MD4雜湊值得到的,保證了同一名稱空間中不同名字的唯一性和不同名稱空間的唯一性。

但同一名稱空間的相同名字生成相同的UUID 4、uuid4():基於隨機數的演算法 由偽隨機數得到的,有一定的重複概率,概率是可以計算出來的但是機率太小。

5、uuid5():基於名字和SAH1雜湊值的演算法 演算法和uuid3相同,不同的是使用SHA1演算法 使用經驗: 1、python中沒有DCE,所以uuid忽略使用 2、uuid4存在概率性重複,由於無對映性,最好不使用 3、如果在全域性的分散式環境下,最好使用uuid1 4、若名字的唯一性要求,最好使用uuid3或uuid5 importuuid print(uuid.uuid1()) print(uuid.uuid4()) print(uuid.uuid3(uuid.NAMESPACE_DNS,"XiaoHa")) print(uuid.uuid3(uuid.NAMESPACE_DNS,"XiaoHa")) print(uuid.uuid3(uuid.NAMESPACE_DNS,"haha")) print(uuid.uuid5(uuid.NAMESPACE_DNS,"XiaoHa")) base64模組: 概念: 用記事本開啟圖片等檔案會看到一堆亂碼,是因為二進位制檔案包含很多無法顯示的內容,所以想讓記事本能處理二進位制資料,就需要將二進位制字串轉換。

base64就是一種常見的二進位制編碼方式 原理: 一個包含64個字元的陣列:["a"-"z","A"-"Z","0"-"9","+","/"] 對二進位制陣列進行處理,沒三個位元組一組,一組就是24bit,劃為4組,每組6bit,得到四個數字作為索引,然後查詢對應的表,得到相應的四個字元,就是編碼後的字串,在末尾如果不夠的話會使用=進行補位。

作用: 適用於小段內容的編碼,比如數字證書籤名,cookie,網頁中傳輸的少量二進位制資料。

注意:bsae64是一種通過查表的編碼方式,不能用於加密。

importbase64 #編碼 s1=b"helloworld" print(base64.b64encode(s1)) #解碼 s2=b"aGVsbG8gd29ybGQ=" print(base64.b64decode(s2)) 如果我們要編碼的二進位制不是3的倍數,base用\x00位元組在末尾補足,在編碼的末尾我們加上一個或者2個等號表示補了多少位元組,解碼時會自動去掉。

由於標準base64編碼後可能會出現+和/,在URL中不能直接作為引數 提供base64.urlsafe_b64encode()編碼,保證url的安全,將+和/替換成-和_,提供base64.urlsafe_b64decode()解碼 由於=字元可能出現在base64編碼中,但是=在url、cookie裡面會造成歧義,所以很多base64編碼會把=去掉 我們可以可以自定義編碼對照表列表中64個字元的排序,但是通常是不會有人用的 hashlib模組 提供了常見的摘要演算法:如IMD5,SHA1 摘要演算法: 又稱雜湊演算法,雜湊演算法。

原理: 它通過一個函式,把任意長度的資料轉為一個長度固定的資料串(通常十六進位制的字串表示) 加密: MD5 最常見的照耀演算法,速度快,生成的結果是128位的位元組,通常用32位的16進位制字串表示 s1=b"XiaoHaisagoodman" m5=hashlib.md5() m5.updata(s1) print(m5.hexdigest()) 如果資訊量比較大,可以分多次呼叫updata,最後結果一樣 SHA1 呼叫SHA1和呼叫MD5完全一樣,SHA1的結果是160bit位元組,通常40位16進位制字串表示 s1=b"XiaoHaisagoodman" sh1=hashlib.sha1() sh1.updata(s1) print(sh1.hexdigest()) SHA256 SHA512    越安全的演算法,不僅越慢,而且摘要會更長   可能會出現兩個不同的資料通過HASH演算法後得到了相同的摘要,因為摘要演算法是將無限多的資料對映到有限的集合中,如果兩個資料的摘要相同,稱之為碰撞,但是非常渺茫 應用: 任何允許使用者登入的網站都會儲存使用者登入的使用者和密碼,那麼密碼一般儲存的是原密碼的摘要值,如果明文存到資料中,如果資料庫洩露,所有使用者資訊會暴露,正確的儲存口令的方式不是儲存明文,而是儲存口令的摘要,當用戶登入時首先會計算使用者輸入的明文口令的摘要,和資料庫中的對比,如果一致說明口令正確否則一定錯誤。

hmac模組 是使用一個key對資料進行“雜讀”後在進行的hash,使用hmac比hash更安全,不同的key會產生不同的hash。

對同一條資料,key不同得到的摘要值不同。

importhmac s=b"XiaoHaisagoodman" key=b"haha" h=hmac.new(key,s,digestmod="MD5") print(h.hexdigest()) itertools模組: 無限迭代:count(start=0,step=1) cycle(iterable):把傳入的序列無限重複下去 repeat(object[,times]):把一個元素無限重複下去,如果提供了第二個引數,就可以指定重複次數 有限迭代:chain(*iterables) 把一組迭代物件串聯起來,形成一個迭代物件   importitertools c=itertools.count() foriinc:    print(i)    time.sleep(1) cy=itertools.cycle("XiaoHa") foriincy:    print(i)    time.sleep(1) r=itertools.repeat("XiaoHa",3) foriinr:    print(i)    time.sleep(1) cha=itertools.chain("ABC","abc") foriincha:    print(i)    time.sleep(1) g=itertools.groupby("aavbbbccdebfff") forkey,valueing:    print(key,list(value))    time.sleep(1) 排列組合 全排列    itertools.permutations(iterable,len) 從n個不同的元素中取出m個元素,按照一定的序列排成一列,叫做從n個元素中獲取m個元素的一個排列,當m=n時叫做全排列 組合     itertools.combinations(iterable,n) 從n個不同的元素中,任意m個元素為一組,叫做從n個不同元素中取出m個元素的組合 排列組合(笛卡爾積)itertools.product(*iterable,repeat=1,)   #全排列   數學A p=list(itertools.permutations([1,2,3,4],4)) print(p) #組合數學C c=list(itertools.combinations([1,2,3,4],4)) print(c) #排列組合 pc=list(["".join(x)forxinitertools.product("0123456789",repeat=4)]) print(pc) 為什麼建構函式不能宣告為虛擬函式,解構函式可以 «上一篇 Concepts:Core,Processor,CPU,Die,Package,andLogicalCore下一篇» 相關推薦 Python常用內建模組——學習筆記 1、datetime:Python處理日期和時間... python常用內建模組:datetime 使用 匯入datetime模組下的datetime類,如果只是importdatetime那麼呼叫要通過d... python學習筆記:第21天常用內建模組-1 目錄 一、collections模組 二、時間模組 也可以在我的個人部落格上閱讀 一、collections模組 1.Counter ... Python基礎之十二常用內建模組 ''' datetime datetime是Python處理日期和時間的標準庫 ''... 常用內建模組 什麼是模組? 模組就是已經寫好,包含了python定義和宣告的檔案. 模組分為內建模組,第三方模組和自定義模組, 使用模組中的內容需要提前... Python17個常用內建模組總結(運維) 1、getpass2、os3、sys4、subprocess5、hashlib6、json7、pi... day15-python常用內置模塊的使用 combine創建如果clas類屬性最大實例個數-i在日常的開發工作中,我們要寫很多的python... 學習筆記(11月10日)--python常用內置模塊的使用(logging,os,command) 學習筆記python培訓四周五次課(11月10日)一、logging日誌是我們排查問題的關鍵利器,寫好日誌記錄,當我們發生問題時,可以快速定位代碼... python_常用內置模塊 none整數RMchoice格式化24小時srcnbspAS一、time模塊(時間模塊):   表示時間... python通過內建模組監控磁碟、記憶體、CPU、負載 01.概述 閒來無事幹,說幹就幹。

主要是通過python函式以及python內建模組來實現對磁碟、記憶體、CPU、負載的資料採集,然後傳送到企業號,併到達微... 搜尋 基礎教學 Mysql入門 Sql入門 Android入門 Docker入門 Go語言入門 Ruby程式入門 Python入門 Python進階 Django入門 Python爬蟲入門 最近訪問 Python常用的內建模組 用+JMX+檢測應用程式 PXE+kickstart無人值守安裝CentOS .Net+Core小技巧+-+使用Swagger上傳文件 Java+資料持久化系列之JDBC OpenCV-FLANN識別 IO模型——阻塞IO、非阻塞IO、多路複用IO、非同步IO、selectors模組 C#幾種擷取字串的方法(split+、Substring、Replace、remove) CANoe+入門+Step+by+step系列(一)基礎應用 Oracle+RAC阻塞排查SQL指令碼



請為這篇文章評分?