python常用模块(一)
time模塊
學習python中有什么不懂的地方,小編這里推薦加小編的python學習群:895 817 687有任何不懂的都可以在里面交流,還有很好的視頻教程pdf學習資料,大家一起學習交流!
常用表示時間方式: 時間戳,格式化的時間字符串,元組(struct_time)
UTC(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界標準時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時。
時間戳(timestamp)的方式:通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。
元組(struct_time)方式:struct_time元組共有9個元素,返回struct_time的函數主要有gmtime(),localtime(),strptime()。
1. 時間戳轉換成struct_time
2. struct_time轉換成時間戳
>>> time.mktime(x) #x = time.localtime() 1513821709.03.struct_time轉換成format_time
%a 本地(locale)簡化星期名稱 %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 秒(01 - 61) 二 %U 一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。 %w 一個星期中的第幾天(0 - 6,0是星期天) 三 %W 和%U基本相同,不同的是%W以星期一為一個星期的開始。 %x 本地相應日期 %X 本地相應時間 %y 去掉世紀的年份(00 - 99) %Y 完整的年份 %Z 時區的名字(如果不存在為空字符) %% ‘%’字符 >>> import time >>> time.time() 1513822266.5659332 >>> x = time.localtime() >>> print(x) time.struct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=11, tm_sec=31, tm_wday=3, tm_yday=355, tm_isdst=0) >>> >>> time.strftime("%Y%m%d %H:%M:%S",x) '20171221 10:11:31' >>>#語法: #strftime(format,[tuple])4 format_time轉換成struct_time
>>> time.strftime("%Y%m%d %H:%M:%S",x) '20171221 10:11:31' >>> >>> >>> time.ct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=11, tm_sec=31, tm_wday=3, tm_yday=355, tm_isdst=-1) 用法: strp('string',format5.結構化時間轉換成字符串時間
6.時間戳轉換成字符串
>>> import time >>> time.time() 1513823679.9577746 >>> print(time.ctime()) Thu Dec 21 10:34:50 2017random模塊
>>> import random >>> random.random() # 0~1 隨機浮點數 0.6990063739837862 >>> random.randint(1,7) #隨機整數1~7 5 >>> random.randrange(1,7) #隨機整數,不包括7 4 >>> random.choice('hello world') #獲取一個隨機元素 'l' >>> random.choice(['1','2','3',]) '2'>>> random.sample([1,2,3,4,5],3) [1, 2, 4] random.sample的函數原型為:random.sample(sequence, k),從指定 序列中隨機獲取指定長度的片隨機驗證碼
import random def v_code():code = ""for i in range(4):num = random.randint(0,9) #隨機選擇0~9A1Z1 = chr(random.randint(65,90)) #隨機選擇A~Za1z1 = chr(random.randint(97,122)) #隨機選擇a~zadd = random.choice([num,A1Z1,a1z1]) #隨機選擇其中一個code = "".join([code,str(add)]) #拼接一次選到的元素return code #返回驗證碼# print(v_code())結果: 5adcOS模塊
os.getcwd() #獲取當前工作目錄,即當前python腳本工作的目錄路徑os.chdir() #當前目錄os.chdir("dirname") #改變當前腳本工作目錄;相當于shell下cd os.chdir(r"c:\Users")os.curdir #返回當前目錄: ('.'),相當于shell下cd.os.pardir # 獲取當前目錄的父目錄字符串名:('..'),相當于shell下cd.. 返回上一層目錄os.makedirs('dirname1/dirname2') #可生成多層遞歸目錄 os.makedirs(r"c:\a\b\c")os.removedirs('dirname1') #若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推 os.removedirs(r"c:\a\b\c")os.mkdir('dirname') #生成單級目錄;相當于shell中mkdir dirnameos.rmdir('dirname') # 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當于shell中rmdir dirnameos.listdir('dirname') #列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印 os.listdir("c:\\test")os.remove() #刪除一個文件 os.remove(r"c:\oldboy.txt")os.rename("oldname","newname") #重命名文件/目錄 os.rename("c:\\test","c:\\test2") os.stat('path/filename') # 獲取文件/目錄信息 os.stat("c:\\test2")os.sep #輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"os.linesep #輸出當前平臺使用的行終止符,win下為"\r\n",Linux下為"\n"os.pathsep #輸出用于分割文件路徑的字符串 os.name #輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'os.system("bash command") #運行shell命令,直接顯示os.environ #獲取系統環境變量os.path.abspath(path) #返回path規范化的絕對路徑os.path.split(path) #將path分割成目錄和文件名二元組返回os.path.dirname(path) #返回path的目錄。其實就是os.path.split(path)的第一個元素os.path.basename(path) # 返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素os.path.exists(path) #如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path) #如果path是絕對路徑,返回Trueos.path.isfile(path) #如果path是一個存在的文件,返回True。否則返回Falseos.path.isdir(path) #如果path是一個存在的目錄,則返回True。否則返回Falseos.path.join(path1[, path2[, ...]]) #將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略os.path.getatime(path) #返回path所指向的文件或者目錄的最后存取時間os.path.getmtime(path) #返回path所指向的文件或者目錄的最后修改時間os.path.getsize(path) #返回path的大小sys模塊
sys.argv 命令行參數List,第一個元素是程序本身路徑 sys.exit(n) 退出程序,正常退出時exit(0) sys.version 獲取Python解釋程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 sys.platform 返回操作系統平臺名稱shutil模塊
高級的 文件、文件夾、壓縮包 處理模塊
shutil.copy(src, dst)
拷貝文件和權限
shutil.copy2(src, dst)
拷貝文件和狀態信息
shutil.copystat(src, dst)
僅拷貝狀態的信息,包括:mode bits, atime, mtime, flags
shutil.copymode(src, dst)
僅拷貝權限。內容、組、用戶均不變
shutil.copytree(src, dst, symlinks=False, ignore=None)
遞歸的去拷貝文件夾
shutil.rmtree(path[, ignore_errors[, onerror]])
遞歸的去刪除文件
Json和pickle模塊
什么是序列化?
我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化
為什么要序列化?
1:持久保存狀態
需知一個軟件/程序的執行就在處理一系列狀態的變化,在編程語言中,'狀態’會以各種各樣有結構的數據類型(也可簡單的理解為變量)的形式被保存在內存中。
內存是無法永久保存數據的,當程序運行了一段時間,我們斷電或者重啟程序,內存中關于這個程序的之前一段時間的數據(有結構)都被清空了。
在斷電或重啟程序之前將程序當前內存中所有的數據都保存下來(保存到文件中),以便于下次程序執行能夠從文件中載入之前的數據,然后繼續執行,這就是序列化。
具體的來說,你玩使命召喚闖到了第13關,你保存游戲狀態,關機走人,下次再玩,還能從上次的位置開始繼續闖關?;蛉?#xff0c;虛擬機狀態的掛起等。
2:跨平臺數據交互
序列化之后,不僅可以把序列化后的內容寫入磁盤,還可以通過網絡傳輸到別的機器上,如果收發的雙方約定好實用一種序列化的格式,那么便打破了平臺/語言差異化帶來的限制,實現了跨平臺數據交互。
反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling。
JSON和Python內置的數據類型對應如下:
實例
import json# 序列化 info = {'name':'derek','age':'22'}with open('test','w') as f:f.write(json.dumps(info))# 反序列化 with open('test','r') as f:info = json.loads(f.read())print(info)pickle (它只能用于Python)
1 import pickle23 dic={'name':'alvin','age':23,'sex':'male'}45 print(type(dic))#<class 'dict'>67 j=pickle.dumps(dic)8 print(type(j))#<class 'bytes'>9 10 11 f=open('序列化對象_pickle','wb')#注意是w是寫入str,wb是寫入bytes,j是'bytes' 12 f.write(j) #-------------------等價于pickle.dump(dic,f) 13 14 f.close() 15 #-------------------------反序列化 16 import pickle 17 f=open('序列化對象_pickle','rb') 18 19 data=pickle.loads(f.read())# 等價于data=pickle.load(f) 20 21 22 print(data['age'])總結:
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
dump()函數接受一個文件句柄和一個數據對象作為參數,把數據對象以特定的格式保存 到給定的文件中。當我們使用load()函數從文件中取出已保存的對象時,pickle知道如何恢復這些對象到它們本來的格式。
dumps()函數執行和dump() 函數相同的序列化。取代接受流對象并將序列化后的數據保存到磁盤文件,這個函數簡單的返回序列化的數據。
loads()函數執行和load() 函數一樣的反序列化。取代接受一個流對象并去文件讀取序列化后的數據,它接受包含序列化后的數據的str對象, 直接返回的對象。
未完待續
總結
以上是生活随笔為你收集整理的python常用模块(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python迭代器生成器装饰器
- 下一篇: websocket python爬虫_p