各個模塊整理
import time
#一 時間戳<---->結構化時間: localtime/gmtime mktime
>>> time.localtime(3600*24)
>>> time.gmtime(3600*24)
>>> time.mktime(time.localtime())
#字符串時間<---->結構化時間: strftime/strptime
>>> time.strftime("%Y-%m-%d %X", time.localtime())
>>> time.strptime("2017-03-16","%Y-%m-%d")
★★★★★ ★★★★★
import random
# a=random.random() # 大於0且小於1之間的小數
# print(a)
# a=random.randint(1,5) # 大於等於1且小於等於5之間的整數,即顧頭也顧尾
# print(a)
# a=random.randrange(1,3) # 大於等於1且小於3之間的整數,顧頭不顧尾
# print(a)
# a=random.choice([1,‘23‘,[4,5]]) # #1或者23或者[4,5],隨機取一個,裏面可以是數字,字符串和列表
# print(a)
# a=random.sample([1,‘23‘,[4,5]],2) # #列表元素任意2個組合,隨機取兩個,裏面可以是數字,字符串和列表
# print(a)
# a=random.uniform(1,3) #大於1小於3的小數
# print(a)
# item=[1,3,5,7,9]
# random.shuffle(item) # 打亂次序
# print(item)
★★★★★
import hashlib
# md5 = hashlib.md5()
# md5.update(b‘hello‘) #這裏記得一定要加b,在python3中,在update括號裏面記得加b;
# print(md5.hexdigest()) #update是累加的過程,可以多次被調用,括號內還可是一句話,可看老師博客
# 計算結果如下:
# 5d41402abc4b2a76b9719d911017c592
# md5=hashlib.sha512()
# md5.update(b‘123aaa‘)
# print(md5.hexdigest())
#打印結果為:442c78a39ee20a1bc0912d3f8b85febd198b323b0843c952ac8c968148a59ba033cefcfc0dddf0632291bc3a62baa3bab9ba0b04dccd63570307a83582259fe9
# obj=hashlib.md5(‘salt‘.encode(‘utf-8‘))
# obj.update(b‘admin‘)
# print(obj.hexdigest())
#打印結果為:c657540d5b315892f950ff30e1394480
# obj=hashlib.md5(‘sdfds2134‘.encode(‘utf-8‘))
# obj.update(b‘admin‘) #表明上面還可以隨機寫東西,但是沒有深究,以後用到再說
# print(obj.hexdigest())
#打印結果為:c7621ca3e95c018b3be4d241c229ab24
★★★★★
import sys
print(sys.path)
#打印結果為:[‘E:\\pythonS5\\june\\模塊整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘]
#E:\\pythonS5\\june\\模塊整理‘,這個表示會把當前所執行文件的目錄,添加到sys.path裏面
# 重點記住前面的路徑:,前面的是當前所執行文件的目錄,會添加到sys.path裏面,後面的python環境所有的路徑
# a=sys.argv #命令行參數List,第一個元素是程序本身路徑,是一個列表的形式
# a1=sys.argv[0]
# print(a) #打印結果為:[‘E:/pythonS5/june/模塊整理/各種模塊.py‘]
# print(a1) #打印結果為: E:/pythonS5/june/模塊整理/各種模塊.py
# print(111) #這行代碼正常打印執行
# sys.exit(0) #退出程序,正常退出時exit(0) 自己測試了裏面沒有0也能執行,用的時候看情況
# print(112) #次行代碼不會執行,因為上調命令以退出
# a=sys.version # 獲取Python解釋程序的版本信息
# print(a) #打印結果為:所用的python的版本信息,3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
# print(sys.path)#打印結果為:[‘E:\\pythonS5\\june\\模塊整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘]
# b_dir=r‘E:\pythonS5\July‘ #這裏r寫不寫,都能實現,這個效果,因不知道啥時候需要加r,所以一直就用著r就行
# sys.path.append(b_dir) #因sys.path是個列表,所以可以用append進行追加,追加進去的路徑,可以調用不同目錄的模塊
# print(sys.path) #打印結果為:[‘E:\\pythonS5\\june\\模塊整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘, ‘E:\\pythonS5\\june‘]
#很明顯已經把‘E:\\pythonS5\\July‘這個路徑加入到當前的環境變量下面了。
# a=sys.platform # 返回操作系統平臺名稱
# print(a) #打印結果為:win32
# ★★★★★
# ★★★★★
import logging #日誌模塊
# 下面5個級別,越往下越高
# logging.debug(‘debug message‘)
# logging.info(‘info message‘)
# logging.warning(‘warning message‘)
# logging.error(‘error message‘)
# logging.critical(‘critical message‘)
# logging.basicConfig(level=logging.DEBUG,
# format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
# filename=‘log.txt‘, #在當前路徑下直接選擇的是相對路徑,也可以選擇絕對路徑,因此會在當前路徑下產生一個log的文件
# filemode=‘a‘,) #a表示:追加,也可用w表示:寫,即可追加到或寫入這個文件中。
# logging.debug(‘debug message‘)
# logging.info(‘info message‘)
# logging.warning(‘warning message‘)
# logging.error(‘error message‘)
# logging.critical(‘critical message‘)
#就這樣,就把上面的信息追加到log.txt文件裏面了
#下面這些參數都是關鍵字的,都是固定的, 不可修改,用那個,就使用那個就行
# logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有:
# filename:用指定的文件名創建FiledHandler,這樣日誌會被存儲在指定的文件中。
# filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。
# format:指定handler使用的日誌顯示格式。
# datefmt:指定日期時間格式。
# level:設置rootlogger(後邊會講解具體概念)的日誌級別
# stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。
#
# format參數中可能用到的格式化串:
# %(name)s Logger的名字
# %(levelno)s 數字形式的日誌級別
# %(levelname)s 文本形式的日誌級別
# %(pathname)s 調用日誌輸出函數的模塊的完整路徑名,可能沒有
# %(filename)s 調用日誌輸出函數的模塊的文件名
# %(module)s 調用日誌輸出函數的模塊名
# %(funcName)s 調用日誌輸出函數的函數名
# %(lineno)d 調用日誌輸出函數的語句所在的代碼行
# %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示
# %(relativeCreated)d 輸出日誌信息時的,自Logger創建以 來的毫秒數
# %(asctime)s 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒
# %(thread)d 線程ID。可能沒有
# %(threadName)s 線程名。可能沒有
# %(process)d 進程ID。可能沒有
# %(message)s用戶輸出的消息
# 另一種方式 是logger對象 相比上面的basicconfig來說,我們推薦使用logger,因為更加靈活,他們兩者地位平等。
# def get_logger():
# logger_obj=logging.getLogger() #獲取這個logger對象
# print(type(logger_obj))
# fh=logging.FileHandler("logger_file.txt")#文件輸出流,創建了一個這個文件
# fh.setLevel(logging.ERROR)
# ch=logging.StreamHandler() #StreamHandler不需要參數
# ch.setLevel(logging.CRITICAL)
#
# formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)
# fh.setFormatter(formatter) #設置成formatter的格式
# ch.setFormatter(formatter) #同上
# logger_obj.addHandler(fh)
# logger_obj.addHandler(ch)
#
# logger_obj.setLevel(logging.DEBUG)#在這裏定義級別
# return logger_obj
#
# logger_obj=get_logger()
#
# logger_obj.info("info")
# logger_obj.error("error")
# logger_obj.warning("warning")
# logger_obj.debug("debug")
# logger_obj.critical("critical")
★★★★★
import json #json裏面老師講課時候說用雙引號,而且序列化之後的結果都是雙引號的
# dic={‘name‘:‘hao‘,‘age‘:11}
# f=open(‘123.txt‘,‘w‘)
# data=json.dumps(dic)
# f.write(data)
# f.close()
#這樣就把字典的信息序列化到123這個文件中了
# f=open(‘123.txt‘,‘r‘)
# data=f.read()
# dic=json.loads(data)
# print(dic) #打印結果為:{‘name‘: ‘wuhao‘, ‘age‘: 11}
#這樣就反序列化出來了
##############
# 上面用的是dumps和loads,下面請看dump和load,比上面更加簡潔
# dic={‘name‘:‘hao‘,‘age‘:11}
# f=open(‘666.txt‘,‘w‘)
# json.dump(dic,f)# 這一步就相當於省略了:data=json.dumps(dic)和f.write(data),直接進行序列化
###上面括號中的dic是要序列化的對象
# f.close()
##下面進行反序列化
# f=open(‘666.txt‘,‘r‘)
# dic=json.load(f)
# print(dic)
★★★★★
##----------------------------序列化
import pickle #和json模塊用法一樣
dic={‘name‘:‘alvin‘,‘age‘:23,‘sex‘:‘male‘}
print(type(dic))#<class ‘dict‘>
j=pickle.dumps(dic)
print(type(j))#<class ‘bytes‘>
f=open(‘序列化對象_pickle‘,‘wb‘)#註意是w是寫入str,wb是寫入bytes,j是‘bytes‘
f.write(j) #-------------------等價於pickle.dump(dic,f)
f.close()
#-------------------------反序列化
import pickle
f=open(‘序列化對象_pickle‘,‘rb‘)
data=pickle.loads(f.read())# 等價於data=pickle.load(f)
print(data[‘age‘])
★★★★★
import shelve
# d = shelve.open(‘shelve_test‘) # 打開一個文件
# name=[‘allen‘,14,‘male‘]
# d[‘alex‘]=name #會寫入到文件中
# d.close()
#讀出文件內容
# d = shelve.open(‘shelve_test‘) # 打開一個文件
# print(d[‘alex‘]) #[‘allen‘, 14, ‘male‘]
# d.close()
★★★★★
# import subprocess #下面的dir是一個命令,
# s=subprocess.Popen(‘dir‘,shell=True,stdout=subprocess.PIPE) # Popen是一個類 ,開啟新的子進程服務
#stdout是輸出的意思,還有stderr是輸入的意思,後期用到了再說,基本形式也是stderr=subprocess.PIPE這種
# print(s.stdout.read().decode(‘gbk‘))
#打印結果為:下面的
# 驅動器 E 中的卷沒有標簽。
# 卷的序列號是 0004-DF53
#
# E:\pythonS5\june\模塊整理 的目錄
#
# 2017/07/15 周六 下午 10:48 <DIR> .
# 2017/07/15 周六 下午 10:48 <DIR> ..
# 2017/07/15 周六 下午 10:48 14,183 各種模塊.py
# 1 個文件 14,183 字節
# 2 個目錄 68,064,280,576 可用字節
###
# 在linux:
# import subprocess
# subprocess.Popen(‘ls -l‘,shell=True)
#subprocess.Popen([‘ls‘,‘-l‘]) 看下面和上面的區別,下面是一個列表的話,就不用寫這個shell=True了
stdin 標準輸入
stdout 標準輸出
stderr 標準錯誤
★★★★★
★★★★★
# configparser 做文件的讀與寫操作
# import configparser #有它自己的格式,
# cfp=configparser.ConfigParser() # 相當於{}
# cfp["DEFAULT"]={"ServerAliveInterval":45,"Compression":"YES","CompressionLevel":9,"ForwardX11":"YES"}
# cfp["bitbucket.org"]={"USER":"hg"}
# cfp["topsecret.server.com"]={"Port ":5000123,"ForwardX11 ":"no"}
# with open("cfp.ini","w") as f:
# cfp.write(f) #這樣就會生成一個cfp.ini文件,裏面有這些字典的內容
# 下面是cfp.ini文件中的內容
# """
# [DEFAULT] #這個字段是默認的(也就是必須寫成[DEFAULT]),就相當於類裏面的共同特征,下面兩個字段都擁有這個[DEFAULT]字段的內容
# serveraliveinterval = 45
# compression = YES
# compressionlevel = 9
# forwardx11 = YES
#
# [bitbucket.org]
# user = hg
# [topsecret.server.com]
# port = 5000123
# forwardx11 = no
# """
#進行增刪改查操作
# import configparser
# cfp=configparser.ConfigParser()
# cfp.read("cfp.ini") #這個是要讀的文件
# print(cfp.sections()) # 查每個的字段名字,也就是最外層的鍵,這個打印沒有默認字段,默認的不需要打印
# print("topsecret.server.coms" in cfp) 判斷這個字段,在不在cfp中,若在則True
# print(cfp.items("bitbucket.org")) #取出所有的鍵值對,包括默認的和自己本身的
# print(cfp.options("bitbucket.org")) 取到所有鍵值對中的鍵
#print(cfp["bitbucket.org"]["user"]) 得到的結果是hg,就是根據字典取值方式進行取值,通過bitbucket.org"裏面的user,取到hg
# 用這個可以直接做三次登錄,判斷在不在這個裏面即可,in不in這裏面
★★★★★
re模塊在正則中整理
各個模塊整理