一驼壶、time模塊
import time
一:時(shí)間有三種格式(*****)
1、時(shí)間戳(float 類型):秒數(shù) ===> 用于時(shí)間計(jì)算
缺省時(shí)刊咳,默認(rèn)是當(dāng)前的時(shí)間
start=time.time()
print(start,type(start))
2焰望、結(jié)構(gòu)化的時(shí)間(struct_time 類型) ===> 獲取時(shí)間的某一部分
將時(shí)間零散的拆分成各個(gè)部分
res = time.localtime()
res1 = time.gmtime()
print(res,type(res))
print(res.tm_year)
print(res)
print(res1)
3廉白、格式化的字符串時(shí)間(str 類型) ===> 用于顯示給人看
遵循一定格式組織的時(shí)間
gmtime 世界標(biāo)準(zhǔn)時(shí)間
localtime 當(dāng)?shù)貢r(shí)間
%p 顯示 上午促脉、下午
am pm
res=time.strftime("%Y-%m-%d %H:%S:%M %p")
res=time.strftime("%Y-%m-%d %X")
print(res,type(res))
二:時(shí)間轉(zhuǎn)換
格式化的字符串 是另外兩者的中介
localtime:缺省,則當(dāng)前
gmtime strftime
----------------------> ---------------------->
時(shí)間戳(timestamp) 結(jié)構(gòu)化的時(shí)間(struct_time) 格式化的字符串時(shí)間(Format String)
<---------------------- <----------------------
maktime strptime
轉(zhuǎn)換用到的函數(shù):
1悦污、localtime([secs]) : 將一個(gè)時(shí)間戳轉(zhuǎn)換為當(dāng)前時(shí)區(qū)的struct_time覆旭。
secs參數(shù)未提供退子,則以當(dāng)前時(shí)間為準(zhǔn)。
time.localtime()
time.localtime(1473525444.037215)
2型将、gmtime([secs]) : 將一個(gè)時(shí)間戳轉(zhuǎn)換為UTC時(shí)區(qū)(0時(shí)區(qū))的struct_time
和localtime()方法類似寂祥,gmtime()方法是將一個(gè)時(shí)間戳轉(zhuǎn)換為UTC時(shí)區(qū)(0時(shí)區(qū))的struct_time。
3七兜、mktime(t) : 將一個(gè)struct_time轉(zhuǎn)化為時(shí)間戳丸凭。
print(time.mktime(time.localtime()))#1473525749.0
4、strftime(format[, t]) : 把一個(gè)代表時(shí)間的元組或者struct_time(如由time.localtime()和 time.gmtime()返回)轉(zhuǎn)化為格式化的時(shí)間字符串。
如果t未指定惜犀,將傳入time.localtime()铛碑。
如果元組中任何一個(gè)元素越界,ValueError的錯(cuò)誤將會(huì)被拋出虽界。
print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
5汽烦、strptime(string[, format]) : 把一個(gè)格式化時(shí)間字符串轉(zhuǎn)化為struct_time。實(shí)際上它和strftime()是逆操作莉御。
print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
6撇吞、time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
tm_wday=3, tm_yday=125, tm_isdst=-1)
在這個(gè)函數(shù)中,format默認(rèn)為:"%a %b %d %H:%M:%S %Y"礁叔。
2.1 時(shí)間戳--->格式化的字符串
struct_time=time.localtime(3333.3)
res=time.strftime("%Y:%m",struct_time)
print(res)
2.2 格式化的字符串時(shí)間--->時(shí)間戳
struct_time=time.strptime("2017-07-03 11:11:11","%Y-%m-%d %H:%M:%S")
res=time.mktime(struct_time)
print(res)
三:
asctime([t]) : 把一個(gè)表示時(shí)間的元組或者struct_time表示為這種形式:'Sun Jun 20 23:21:05 1993'牍颈。
如果沒有參數(shù),將會(huì)將time.localtime()作為參數(shù)傳入琅关。
print(time.asctime())#Sun Sep 11 00:43:43 2016
print(time.asctime(time.localtime(3333.3)))
ctime([secs]) : 把一個(gè)時(shí)間戳(按秒計(jì)算的浮點(diǎn)數(shù))轉(zhuǎn)化為time.asctime()的形式煮岁。
如果參數(shù)未給或者為None的時(shí)候,將會(huì)默認(rèn)time.time()為參數(shù)死姚。它的作用相當(dāng)于time.asctime(time.localtime(secs))人乓。
print(time.ctime()) # Sun Sep 11 00:46:38 2016
print(time.ctime(time.time())) # Sun Sep 11 00:46:38 2016
print(time.ctime(3333.3))
四: sleep(secs) : 線程推遲指定的時(shí)間運(yùn)行,單位為秒都毒。
time.sleep(3)
==========================> datetime模塊========================
import datetime
1色罚、獲取當(dāng)前時(shí)間
print(datetime.datetime.now())
2、時(shí)間戳---轉(zhuǎn)成--->日期格式
3账劲、只顯示日期:
print(datetime.date.fromtimestamp(time.time()))
# 2020-07-30
4戳护、顯示日期+時(shí)分
print(datetime.datetime.fromtimestamp(time.time()))
# 2020-07-30 16:20:58.497910
5、加時(shí)間
print(datetime.datetime.now() + datetime.timedelta(days=3))
6瀑焦、減時(shí)間
print(datetime.datetime.now() + datetime.timedelta(days=-3))
7腌且、替換時(shí)間
print(datetime.datetime.now())
new_res=res.replace(year=1999,month=9)
print(new_res)
==========================> random模塊 <=============================
import random
# os.path.以下各個(gè)函數(shù)
random模塊中的常用函數(shù):
1、random(): 隨機(jī) 產(chǎn)生一個(gè)小數(shù) (0,1)
print(random.random())
#大于0且小于1之間的小數(shù)
2榛瓮、randint(): 隨機(jī) 產(chǎn)生一個(gè)整數(shù) [a,b]
print(random.randint(1,3)) #[1,3]
3铺董、choice(): 隨機(jī) 選取一個(gè)元素
print(random.choice([1,'23',[4,5]]))
4、sample(): 隨機(jī) 選取列表中任意2個(gè)元素進(jìn)行組合
print(random.sample([1,'23',[4,5]],2))
5禀晓、uniform(): 隨機(jī) 產(chǎn)生一個(gè)小數(shù)(a,b)
print(random.uniform(1,3))
# 大于1小于3的小數(shù)精续,如1.927109612082716
6、shuffle(): 打亂列表中元素的順序,相當(dāng)于"洗牌"
item=[1,3,5,7,9]
random.shuffle(item)
print(item)
隨機(jī)驗(yàn)證碼原理:隨機(jī)的字母 粹懒、隨機(jī)的數(shù)字 里面挑選一個(gè)作為一個(gè)結(jié)果
def make_code(n=5):
res = ''
for i in range(n):
s1 = str(random.randint(0, 9)) # 產(chǎn)生數(shù)字
s2 = chr(random.randint(65, 90)) # 產(chǎn)生字母
# 每一輪生成一個(gè)數(shù)字or字母重付,將他們連接在總的字符串上
res += random.choice([s1, s2])
return res
print(make_code(4))
========================> os模塊 <===============================
os模塊是與操作系統(tǒng)交互的一個(gè)接口
在Linux和Mac平臺(tái)上,該函數(shù)會(huì)原樣返回path凫乖,在windows平臺(tái)上會(huì)將路徑中所有字符轉(zhuǎn)換為小寫确垫,并將所有斜杠轉(zhuǎn)換為飯斜杠弓颈。
import os
# os.path.以下各個(gè)函數(shù)
os.path下的常用函數(shù)
1、dirname(): 返回path的目錄删掀∠杓剑【推薦此方式!】
其實(shí)就是os.path.split(path)的第一個(gè)元素
print(os.path.dirname("D:/python全棧15期/day21/03os模塊.py"))
2爬迟、normpath(): 返回path的路徑橘蜜,【不推薦此方式菊匿!】
res=os.path.join(
__file__,
"..",
".."
)
print(os.path.normpath(res))
3付呕、basename(): 返回path最后的文件名。
如果path以/或\結(jié)尾跌捆,那么就會(huì)返回空值徽职。
即os.path.split(path)的第二個(gè)元素
print(os.path.basename("D:/python全棧15期/day21/03os模塊.py"))
4、join(): 將多個(gè)路徑組合后返回佩厚,
第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略
print(os.path.join("a",'b','D:\c','d.txt'))
5姆钉、isabs():判斷是否是絕對(duì)路徑
print(os.path.isabs("D:/python全棧15期/day21/"))
print(os.path.isabs("/python全棧15期/day21/"))
6、rename(): 重命名文件/目錄
7抄瓦、remove(): 刪除一個(gè)文件
8潮瓶、split(path): 將path分割成目錄和文件名二元組返回
9、getsize(): 返回該文件/文件夾的大小
10钙姊、exists(): 判斷路徑是否存在
如果path存在毯辅,返回True;如果path不存在煞额,返回False
print(os.path.exists("D:/python全棧15期/day21/"))
11思恐、isfile(): 判斷文件是否存在
如果path是一個(gè)存在的文件!文件膊毁!文件胀莹!,返回True婚温。否則返回False
12描焰、isdir(): 判斷目錄是否存在
如果path是一個(gè)存在的目錄!目錄栅螟!目錄荆秦!,則返回True嵌巷。否則返回False
13萄凤、split(): 將path分割成目錄和文件名二元組返回
14、listdir('dirname'): 列出指定目錄下的所有文件和子目錄搪哪,
包括隱藏文件靡努,并以列表方式打印
模擬windows的cmd.exe終端:
import os
print(os.listdir("."))
import os
cmd=input(r"""
Microsoft Windows [版本 10.0.17763.1339]
(c) 2018 Microsoft Corporation。保留所有權(quán)利。
%s=====> """ %os.getcwd())
res=os.system(cmd)
print('='*100)
print(res)
import os
print(__file__)
print(os.path.abspath(__file__))
res=os.path.split("D:/python全棧15期/day21/03 os模塊.py")
# 用于將 所在的文件夾的路徑惑朦,和文件名 相分割開兽泄,存進(jìn)元組里面
print(res)
======================> subprocess模塊 <=================================
import subprocess
# pwd ; sasdfasdf ;echo 123
obj = subprocess.Popen("**這里是命令名稱**", shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
res1=obj.stdout.read()
res2=obj.stderr.read()
# print(res1.decode('gbk'))
print(res2.decode('gbk'))
不同的進(jìn)程,都有只屬于自己的內(nèi)存空間(這是物理隔離)漾月;進(jìn)程不能訪問其他進(jìn)程的內(nèi)存空間(安全保護(hù)機(jī)制)
為滿足 不同進(jìn)程之間的通信(數(shù)據(jù)共享)的需求病梢,開辟的共享內(nèi)存
管道 屬于共享內(nèi)存;不同的進(jìn)程都可以訪問這塊內(nèi)存
操作系統(tǒng)命令的結(jié)果默認(rèn) 是直接返回到終端梁肿,
通過將結(jié)果蜓陌,接收放到管道,可以對(duì) 結(jié)果進(jìn)行處理
應(yīng)用程序 的命令 都是調(diào)用 操作系統(tǒng)的命令吩蔑,來執(zhí)行服務(wù)
windows提供的cmd.exe也是一個(gè)操作系統(tǒng)的提供的一個(gè)應(yīng)用程序
一個(gè)windows系統(tǒng)命令钮热,就是一個(gè)程序
命令運(yùn)行程序格式 以空格為分隔符
解釋器 程序名 + 傳入的參數(shù)
也相當(dāng)于,input方式烛芬,一次輸入一個(gè)參數(shù)
相比較而言隧期,這種寫在一行的形式,更為簡(jiǎn)潔
區(qū)別在于赘娄,傳入程序所需要的參數(shù) 的方式
在windows的cmd中 由于windows命令是.exe直接運(yùn)行的文件仆潮,所以不需要加解釋器
而要運(yùn)行 .py文件的話,則需要加python解釋器
sys.argv 將參數(shù)采集 命令行中傳入的參數(shù)遣臼, 用索引[index]來區(qū)分采集的是哪一個(gè)參數(shù)
永久的配置 寫到 配置文件中
臨時(shí)的配置 通過 傳入?yún)?shù)
======================sys模塊==========================
import sys
sys.path
print(sys.argv)
src_file = input("源文件路徑:").strip()
dst_file = input("目標(biāo)文件路徑:").strip()
src_file = sys.argv[1]
dst_file = sys.argv[2]
with open(r"%s" %src_file,mode='rb') as f1,open(r"%s" %dst_file,mode='wb') as f2:
for line in f1:
f2.write(line)
實(shí)現(xiàn)打印進(jìn)度條=====================
原理:通過靜態(tài)的方案實(shí)現(xiàn)動(dòng)態(tài)的效果
原理闡述:
import time
print("[# ]",end='')
time.sleep(0.3)
print("\r[## ]",end='')
time.sleep(0.3)
print("\r[### ]",end='')
time.sleep(0.3)
print("\r[#### ]",end='')
print("[%-15s]" % "###",)
print("[%-15s]" % "####",)
實(shí)現(xiàn)代碼:
import time
def progress(percent):
if percent > 1:
percent=1
# 第二個(gè)%號(hào)代表取消第一個(gè)%的特殊意義
# -50用來控制對(duì)齊方式性置、寬度
print("\r[%-50s] %d%%" % ("#"*int(50*percent),int(100 * percent)),end='')
total_size = 1025
recv_size = 0
while recv_size < total_size:
# 每次下載1024
time.sleep(0.3)
#模擬數(shù)據(jù)的傳輸延遲
recv_size+=1024
#接收的比例
percent = recv_size / total_size
progress(percent)
\r 是在行首打印
進(jìn)度條的原理:用 靜態(tài) 模擬出 動(dòng)態(tài) 效果
替換整體靜態(tài),速度很快時(shí)暑诸,就成了動(dòng)態(tài)
% 的優(yōu)先級(jí)比 * 高
在進(jìn)度條中蚌讼,要使用括號(hào),標(biāo)注優(yōu)先級(jí)
1 sys.argv 命令行參數(shù)List个榕,第一個(gè)元素是程序本身路徑