python標準模組(一)

morra發表於2016-10-25

本文會涉及到的模組:

  1. time
  2. datetime
  3. sys
  4. os
  5. random
  6. re
  7. hashlib

模組,用若干程式碼實現了某個功能的程式碼集合。 類似於函數語言程式設計和麵向過程程式設計,函數語言程式設計則完成一個功能,其他程式碼用來呼叫即可,提供了程式碼的重用性和程式碼間的耦合。而對於一個複雜的功能來,可能需要多個函式才能完成(函式又可以在不同的.py檔案中),n個 .py 檔案組成的程式碼集合就稱為模組。
如:os 是系統相關的模組;file是檔案操作相關的模組

模組分為三種:

  • 自定義模組
  • 內建標準模組(又稱標準庫)
  • 開源模組

1. time模組

import time

sleep(5)
print(time.time())      #列印時間戳
print(time.ctime())      #列印當前系統時間
print(time.ctime(time.time()-86400))      #列印昨天這個時候的系統時間
==========================================================
#以struct_time格式顯示時間,輸出時間物件
print(time.gmtime())    #顯示國際系統時間時間
print(time.localtime())     #顯示本地地系統時間(無時差)
==========================================================
print(time.mktime(time.localtime()))    #把struct_time格式轉成時間戳格式,必須傳入時間物件,否則報錯
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))    #把struct_time格式轉換成字串格式
print(time.strptime("2016-01-28", "%Y-%m-%d"))  # 把字串格式轉換成struct_time格式
==========================================================
#格式化輸出時間
object= time.gmtime()
print('%s-%s-%s %s:%s:%s'%(object.tm_year,object.tm_mon,object.tm_mday,object.tm_hour,object.tm_min,object.tm_sec))

OUTPUT:     #不是北京時間,有時差,當前北京時間為Sat Oct 22 18:38:23 2016
2016-10-22 10:38:23

2. datetime

import datetime

print(datetime.datetime.now())      #2016-10-23 16:28:38.389144
print(datetime.datetime.today())    #2016-10-23 16:28:38.389144
print(datetime.date.today())    #2016-10-23

print(datetime.date.fromtimestamp(time.time()) )  # 時間戳直接轉成日期格式 2016-08-19

#時間的加減
print(datetime.datetime.now() + datetime.timedelta(3)) #當前時間+3天
print(datetime.datetime.now() + datetime.timedelta(days=-3)) #當前時間-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #當前時間+3小時
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #當前時間+30分

# c_time  = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #時間替換

3. sys

sys模組裡存放的都是和直譯器相關的功能。

(1) sys.argv

import sys
 
print(sys.argv)
 
 
#輸出
$ python test.py helo world
['test.py', 'helo', 'world']  #把執行指令碼時傳遞的引數獲取到了

(2) sys.path

import sys

for i in sys.path:        
    print(i)            #檢視python環境變數列表

OUTPUT:
/Library/Frameworks/Python.framework/Versions/3.5/lib/python35.zip
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/qrcode-5.3-py3.5.egg
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/six-1.10.0-py3.5.egg

(3) sys.exit(),等同於exit()正常退出時exit(0)

import sys

choice = input("wanna quit?")
if choice == 'y' or choice == 'Y':
    sys.exit("Good Bye!")        #等同於exit("Good Bye!")

OUTPUT:
wanna quit?y
Good Bye!

Process finished with exit code 1

(4) sys.platform,返回作業系統平臺名稱

import sys

#MacOS
print(sys.platform) #darwin

#Win7
print(sys.platform) #win32

(5) sys.stdout.write(),在螢幕上輸出

#進度條的簡單實現

import sys
import time

for i in range(101):
    sys.stdout.write("\r"+"%s%%\t"%(i)+"#"*i)
    sys.stdout.flush()
    time.sleep(0.05)

4. os

os模組存放和系統相關的功能

方法 備註
os.getcwd 獲取當前工作目錄,即當前python指令碼工作的目錄路徑
os.getuid 返回當前程式的有效使用者 id
os.getpid 函式返回當前程式的 id
os.getppid 返回父程式的 id
os.uname 函式返回識別作業系統的不同資訊
os.name 字串指示當前使用平臺。win->'nt'; Linux->'posix'
os.chdir("dirname") 改變當前指令碼工作目錄;相當於shell下cd
os.curdir 返回當前目錄: ('.')
os.pardir 獲取當前目錄的父目錄字串名:('..')
os.makedirs('dir1/dir2') 可生成多層遞迴目錄
os.removedirs('dirname1') 若目錄為空,則刪除,並遞迴到上一級目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname') 生成單級目錄;相當於shell中mkdir dirname
os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
os.listdir('dirname') 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表方式列印
os.remove() 刪除一個檔案
os.rename("oldname","new") 重新命名檔案/目錄
os.stat('path/filename') 獲取檔案/目錄資訊
os.sep 作業系統特定的路徑分隔符,win下為"\",Linux下為"/"
os.linesep 當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep 用於分割檔案路徑的字串
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不存在,返回False
os.path.isabs(path) 如果path是絕對路徑,返回True
os.path.isfile(path) 如果path是一個存在的檔案,返回True。否則返回False
os.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑之前的引數將被忽略
os.path.getatime(path) 返回path所指向的檔案或者目錄的最後存取時間
os.path.getmtime(path) 返回path所指向的檔案或者目錄的最後修改時間
import os

print(os.path.dirname(__file__))    #/Users/morra/Desktop/python/lib
print(os.path.basename(__file__))   #index.py


tmp = os.path.dirname(__file__)

print(os.path.dirname(tmp))         #/Users/morra/Desktop/python/
print(os.path.basename(tmp))        #lib,返回index.py的上一級目錄

5. random

(1) 隨機數

mport random
print random.random()
print random.randint(1,2)
print random.randrange(1,10)

(2) 生成隨機驗證碼

import random
checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print checkcode

6. re模組  

詳見《python正規表示式》

7. hashlib

用於加密相關的操作,代替了md5模組和sha模組,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法

import hashlib
 
# ######## md5 ########
hash = hashlib.md5()
# help(hash.update)
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
print(hash.digest())
 
 
######## sha1 ########
 
hash = hashlib.sha1()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
 
# ######## sha256 ########
 
hash = hashlib.sha256()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
 
 
# ######## sha384 ########
 
hash = hashlib.sha384()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
 
# ######## sha512 ########
 
hash = hashlib.sha512()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())

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

import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
hash.update(bytes('admin',encoding="utf-8"))
print(hash.hexdigest())

python內建還有一個 hmac 模組,它內部對我們建立 key 和 內容 進行進一步的處理然後再加密

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

相關文章