模塊:os、sys、time、logging、json/pickle、hashlib、random、re

模塊分為三種:

  • 自定義模塊
  • 第三方模塊
  • 內(nèi)置模塊

自定義模塊

1、定義模塊

將一系列功能函數(shù)或常量封裝為一個獨立的.py或多個.py文件。

2、導(dǎo)入模塊

1 import module 2 from module.xx import yy 3 from module.xxxxx import as rename 對于難于編寫可以將其重新命名為一個新的模塊名字 4 from module.xx import * #不介意應(yīng)用這種導(dǎo)入方式,此種方式對于較大模塊容易產(chǎn)生函數(shù)名沖突。

3、導(dǎo)入模塊基準(zhǔn)路徑

 模塊系統(tǒng)路徑
 添加模塊路徑方法

注:os.path.dirname()表示當(dāng)前目錄的上一級目錄

內(nèi)置模塊

所謂內(nèi)置模塊是python自帶的模塊,使用前先導(dǎo)入。

一、sys

相關(guān)操作:

1
2
3
4
5
6
7
8
sys.argv #命令行參數(shù)列表,第一個參數(shù)默認(rèn)是程序路徑
sys.exit(n) #退出程序
sys.version #獲取python解釋器的版本信息
sys.maxint #最大的int值
sys.path # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環(huán)境變量的值
sys.stdin #輸入相關(guān)
sys.stdout #輸出相關(guān)
sys.stderror #錯誤相關(guān)
 進度條

二、os

用于提供系統(tǒng)級別的操作——常用一些功能

1
2
3
4
5
6
7
8
9
10
11
12
13
os.path.exists(path)     #如果path存在,返回True;如果path不存在,返回False.
os.makedirs('dir1/dir2') #可生成多層遞歸目錄
os.removedirs('dirname1')#若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname')      #生成單級目錄;相當(dāng)于shell中mkdir dirname
os.rmdir('dirname')      #刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當(dāng)于shell中rmdir dirname
os.listdir('dirname')    #列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
os.remove()              #刪除一個文件
os.rename("oldname","new")#重命名文件/目錄
os.path.abspath(path)    #返回path規(guī)范化的絕對路徑
os.path.join(path1[, path2[, ...]]) #將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略
os.path.split(path)      #將path分割成目錄和文件名二元組返回 os.path.dirname(path) #返回path的目錄。其實就是os.path.split(path)的第一個元素 <br>os.path.basename(path)#返回path最后的文件名。如何path以/或\結(jié)尾,那么就會返回空值。即os.path.split(path)的第二個元素
os.path.isabs(path)      #如果path是絕對路徑,返回True
os.path.isfile(path)     #如果path是一個存在的文件,返回True。否則返回False <br>os.path.isdir(path)      #如果path是一個存在的目錄,則返回True。否則返回False

三、time

  • 時間戳               1970年1月1日之后的秒,即:time.time()
  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
  • 結(jié)構(gòu)化時間          元組包含了:年、日、星期等... time.struct_time    即:time.localtime()
復(fù)制代碼
 1 print time.time()#1970年1月1日之后的秒  2 print time.mktime(time.localtime())  3  4 print time.gmtime() #可加時間戳參數(shù)  5 print time.localtime() #可加時間戳參數(shù)  6 print time.strptime('2014-11-11', '%Y-%m-%d')  7  8 print time.strftime('%Y-%m-%d') #默認(rèn)當(dāng)前時間  9 print time.strftime('%Y-%m-%d',time.localtime()) #默認(rèn)當(dāng)前時間 10 print time.asctime() 11 print time.asctime(time.localtime()) 12 print time.ctime(time.time()) 13 14 import datetime 15 ''' 16 datetime.date:表示日期的類。常用的屬性有year, month, day 17 datetime.time:表示時間的類。常用的屬性有hour, minute, second, microsecond 18 datetime.datetime:表示日期時間 19 datetime.timedelta:表示時間間隔,即兩個時間點之間的長度 20 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) 21 strftime("%Y-%m-%d") 22 ''' 23 import datetime 24 print datetime.datetime.now() 25 print datetime.datetime.now() - datetime.timedelta(days=5)
復(fù)制代碼

 補充:

1
2
3
4
5
6
print(time.asctime(time.localtime())) #返回時間格式Mon Oct 24 21:21:03 2016"
print(time.ctime()) #返回Mon Oct 24 21:22:03 2016 格式, 同上
print(time.ctime(time.time()-86400))#返回Sun Oct 23 21:22:03 2016 返回當(dāng)前時間的前一天
print(time.gmtime()) #返回一個struct_time 結(jié)構(gòu)體 將當(dāng)前時間賦值在struct_time每一個成員中(這里時間是utc時間應(yīng)該是格林威治時間)
time.mktime(time.localtime())# mktime 必須傳一個struct_time 對象否則報錯,將時間對象轉(zhuǎn)換為時間戳
time.sleep(4) #阻塞秒數(shù)
復(fù)制代碼
%Y  Year with century as a decimal number. %m  Month as a decimal number [01,12]. %d  Day of the month as a decimal number [01,31]. %H  Hour (24-hour clock) as a decimal number [00,23]. %M  Minute as a decimal number [00,59]. %S  Second as a decimal number [00,61]. %z  Time zone offset from UTC. %a  Locale's abbreviated weekday name. %A  Locale's full weekday name. %b  Locale's abbreviated month name. %B  Locale's full month name. %c  Locale's appropriate date and time representation. %I  Hour (12-hour clock) as a decimal number [01,12]. %p  Locale's equivalent of either AM or PM.
復(fù)制代碼

四、logging 日志模塊

  • 單文件日志
復(fù)制代碼
1 #寫到文件 指定日志級別  注:只有高于或者等于指定級別的信息才會被記錄 Debug  info warning error critical 2 logging.basicConfig(filename='example.log', level=logging.INFO, 3 format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p') 4 5 logging.debug("I am a debug log ") 6 logging.info("info log") 7 logging.warning("warning log") 8 logging.error("error log") 9 logging.critical("critical log")
復(fù)制代碼
  • 多文件日志
復(fù)制代碼
 1 import logging  2 #create  a logger  3 logger = logging.getLogger('TEST_LOG')  4 logger.setLevel(logging.WARNING) #全局日志級別 #如果全局級別高 以全局為準(zhǔn) 如果局部變量的級別高 就按局部,  5 #換句話說  局部最高就優(yōu)先 全局級別最高 就優(yōu)先  6  7 #創(chuàng)建輸出到屏幕的 handler  8 ch = logging.StreamHandler()  9 ch.setLevel(logging.DEBUG) #設(shè)置 屏幕輸出日志級別 10 11 #創(chuàng)建輸出到文件的handler 12 fh = logging.FileHandler("access.log") 13 fh.setLevel(logging.DEBUG) 14 15 #往另一個文件寫 16 fh2 = logging.FileHandler("access2.log") 17 fh2.setLevel(logging.ERROR) 18 #創(chuàng)建輸出格式 19 formatter_ch = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s ') 20 formatter_fh = logging.Formatter('%(asctime)s-%(filename)s-%(module)s-%(lineno)d-%(levelname)s-%(message)s') 21 22 #設(shè)定 格式 23 ch.setFormatter(formatter_ch) 24 fh.setFormatter(formatter_fh) 25 fh2.setFormatter(formatter_fh) 26 27 #將handler 注冊到logger 28 logger.addHandler(ch) 29 logger.addHandler(fh) 30 logger.addHandler(fh2) 31 32 logger.debug("debug log ") 33 logger.info("info log") 34 logger.warning("warning log") 35 logger.error("error log") 36 logger.critical("critical log")
復(fù)制代碼

Format:日志記錄格式


 五、序列化

  • json 用于【字符串】和 【python基本數(shù)據(jù)類型】 間進行轉(zhuǎn)換
  • pickel  用于【python特有的類型】 和 【python基本數(shù)據(jù)類型】間進行轉(zhuǎn)換
復(fù)制代碼
 1 import json  2 import requests  3 #序列化 是將python基本數(shù)據(jù)類型轉(zhuǎn)化為字符串  4 dic ={"key":123}  5 print(dic,type(dic))  6 ret = json.dumps(dic)  7 print(ret,type(ret))  8  9 #反序列化 將字符串轉(zhuǎn)化為python 基本數(shù)據(jù)類型 10 dic2 = json.loads(ret) 11 print(dic2,type(dic2)) 12 13 re =requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京') 14 re.encoding ='utf-8' 15 print(re.text) 16 #轉(zhuǎn)化為字典 進行操作 17 w_dic = json.loads(re.text) 18 print(w_dic,type(w_dic)) 19 20 #dump  and load #dump 先序列化 然后在寫入文件 load 先讀出來再將數(shù)據(jù)反序列化為python基本數(shù)據(jù)類型 21 li = [11,22,33] 22 json.dump(li,open('db','w')) 23 li2 = json.load(open('db','r')) 24 print(li2,type(li2))
復(fù)制代碼

六、加密hashlib模塊 

用于加密相關(guān)的操作,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法:用法基本相同

復(fù)制代碼
1 import hashlib 2 def md5(str): 3 md5_obj = hashlib.md5() # 更安全 可以          md5(bytes(str,encoding='utf-8')) 4 md5_obj.update(bytes(str,encoding="utf-8")) 5 encodetext =md5_obj.hexdigest() 6 print(encodetext) 7 md5("sdfdsf")
復(fù)制代碼

以上加密算法雖然依然非常厲害,但時候存在缺陷,即:通過撞庫可以反解。所以,有必要對加密算法中添加自定義key再來做加密。

1 import hmac   2 h = hmac.new(bytes('898oaFs09f',encoding="utf-8")) h.update(bytes('admin',encoding="utf-8")) 3 print(h.hexdigest())

七、隨機數(shù)random模塊

1 import random 2 3 print(random.random()) 4 print(random.randint(1, 2)) 5 print(random.randrange(1, 10))

隨機驗證碼實現(xiàn):

第三方模塊

  • 安裝:

pip3 install requests

  • 源碼安裝

例子:安裝request

1.下載第三方模塊源碼(百度搜索模塊名字)

http://www.python-requests.org/en/master/user/install/#install

2.解壓模塊

3.cd 到setup.py目錄下

4.執(zhí)行 python setup.py install (如果不依賴其他模塊,直接就會安裝成功)