一.簡介
模塊是一個保存了Python代碼的文件。模塊能定義函數,類和變量。模塊里也能包含可執行的代碼
模塊分為三種:
- 自定義模塊
- 內置標准模塊
- 開源模塊(第三方)
自定義模塊:
模塊導入
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
導入自定義模塊時注意路徑,查看庫文件sys.path,sys.path.append('路徑')添加自定義路徑
二.內置模塊
time模塊
time模塊提供各種操作時間的函數
說明:一般有兩種表示時間的方式:
1.時間戳的方式(相對於1970.1.1 00:00:00以秒計算的偏移量),時間戳是惟一的
2.以數組的形式表示即(struct_time),共有九個元素,分別表示,同一個時間戳的struct_time會因為時區不同而不同
The tuple items are:
year (including century, e.g. 1998)
month (1-12)
day (1-31)
hours (0-23)
minutes (0-59)
seconds (0-59)
weekday (0-6, Monday is 0)
Julian day (day in the year, 1-366)
DST (Daylight Savings Time) flag (-1, 0 or 1)
- 函數
time() -- 返回時間戳
sleep() -- 延遲運行單位為s
gmtime() -- 轉換時間戳為時間元組(時間對象)
localtime() -- 轉換時間戳為本地時間對象
asctime() -- 將時間對象轉換為字符串
ctime() -- 將時間戳轉換為字符串
mktime() -- 將本地時間轉換為時間戳
strftime() -- 將時間對象轉換為規范性字符串
常用的格式代碼:
%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.
strptime() -- 將時間字符串根據指定的格式化符轉換成數組形式的時間
常用格式代碼:
同strftime
- 舉例

#!/usr/bin/env python # -*- coding:utf-8 -*- import time #返回當前時間戳 print(time.time()) #返回當前時間 print(time.ctime()) #將時間戳轉換為字符串 print(time.ctime(time.time()-86640)) #本地時間 print(time.localtime(time.time()-86400)) #與time.localtime()功能相反,將struct_time格式轉回成時間戳格式 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")) #休眠5s time.sleep(5)
2.datetime模塊
定義的類有:
datetime.date --表示日期的類。常用的屬性有year, month, day
datetime.time --表示時間的類。常用的屬性有hour, minute, second, microsecond
datetime.datetime --表示日期時間
datetime.timedelta --表示時間間隔,即兩個時間點之間的長度
- date類
date類表示日期,構造函數如下 :
datetime.date(year, month, day);
year (1-9999)
month (1-12)
day (1-31)
date.today() --返回一個表示當前本地日期的date對象
date.fromtimestamp(timestamp) --根據給定的時間戮,返回一個date對象

#根據給定的時間戮,返回一個date對象 print(datetime.date.fromtimestamp(time.time())) #返回一個表示當前本地日期的date對象 print(datetime.datetime.today())
date.year() --取給定時間的年
date.month() --取時間對象的月
date.day() --取給定時間的日
date.replace() --生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性
date.timetuple() --返回日期對應的time.struct_time對象
date.weekday() --返回weekday,Monday == 0 ... Sunday == 6
date.isoweekday() --返回weekday,Monday == 1 ... Sunday == 7
date.ctime() --返回給定時間的字符串格式
import datetime from dateutil.relativedelta import relativedelta # 獲取當前時間的前一個月 datetime.datetime.now() - relativedelta(months=+1) # 獲取當天的前一個月 datetime.date.today() - relativedelta(months=+1)

#取時間對象的年 print(datetime.date.today().year) #取時間對象的月 print(datetime.date.today().month) #取時間對象的日 print(datetime.date.today().day) #生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性 print(datetime.date.today().replace(2010,6,12)) #返回給定時間的時間元組/對象 print(datetime.date.today().timetuple()) #返回weekday,從0開始 print(datetime.date.today().weekday()) #返回weekday,從1開始 print(datetime.date.today().isoweekday()) #返回給定時間的字符串格式 print(datetime.date.today().ctime())
-
time 類
time類表示時間,由時、分、秒以及微秒組成
time.min() --最小表示時間
time.max() --最大表示時間
time.resolution() --微秒

#最大時間 print(datetime.time.max) #最小時間 print(datetime.time.min) #時間最小單位,微秒 print(datetime.time.resolution)
- datetime類
datetime是date與time的結合體,包括date與time的所有信息
datetime.max() --最大值
datetime.min() --最小值
datetime.resolution() --datetime最小單位
datetime.today() --返回一個表示當前本地時間
datetime.fromtimestamp() --根據給定的時間戮,返回一個datetime對象
datetime.year() --取年
datetime.month() --取月
datetime.day() --取日期
datetime.replace() --替換時間
datetime.strptime() --將字符串轉換成日期格式
datetime.time() --取給定日期時間的時間

#datetime最大值 print(datetime.datetime.max) #datetime最小值 print(datetime.datetime.min) #datetime最小單位 print(datetime.datetime.resolution) #返回一個表示當前本地時間 print(datetime.datetime.today()) #根據給定的時間戮,返回一個datetime對象 print(datetime.datetime.fromtimestamp(time.time())) #取時間對象的年 print(datetime.datetime.now().year) #取時間對象的月 print(datetime.datetime.now().month) #取時間對象的日 print(datetime.datetime.now().day) #生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性 print(datetime.datetime.now().replace(2010,6,12)) #返回給定時間的時間元組/對象 print(datetime.datetime.now().timetuple()) #返回weekday,從0開始 print(datetime.datetime.now().weekday()) #返回weekday,從1開始 print(datetime.datetime.now().isoweekday()) #返回給定時間的字符串格式 print(datetime.datetime.now().ctime()) #將字符串轉換成日期格式 print(datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")) #取給定日期時間的時間 print(datetime.datetime.now().time()) #獲取5日前時間 print(datetime.datetime.now() + datetime.timedelta(days=-5))
3.sys模塊
用於提供對解釋器相關的訪問及維護,並有很強的交互功能
常用函數:
sys.argv --傳參,第一個參數為腳本名稱即argv[0]
sys.path --模塊搜索路徑
sys.moudule --加載模塊字典
sys.stdin --標准輸入
sys.stdout --標准輸出
sys.stderr --錯誤輸出
sys.platform --返回系統平台名稱
sys.version --查看python版本
sys.maxsize --最大的Int值
舉例:
#!/usr/bin/env python # -*- coding:utf-8 -*- #傳參 import sys print(sys.argv[0]) print(sys.argv[1]) print(sys.argv[2]) ##運行 python argv.py argv0 argv1 argv.py argv0 argv1

#!/usr/bin/env python # -*- coding:utf-8 -*- import sys,os dirname = sys.stdin.read() os.mkdir(dirname.strip())
#sys.exit()系統返回值 >>> import sys >>> sys.exit(0) C:\>echo %ERRORLEVEL% 0 #windows查看系統返回值命令 echo %ERRORLEVEL% #linux查看系統返回值命令 echo $?

>>> import sys >>> sys.platform 'win32' >>> sys.version '3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)]' >>> sys.maxsize 9223372036854775807

import sys,time for i in range(100): sys.stdout.write('r') sys.stdout.write('%s%% |%s' % (int(i/100*100),int(i/100*100) * '*')) sys.stdout.flush time.sleep(0.2)
4.pickle模塊
pickle,用於python特有的類型 和 python的數據類型間進行轉換
pickle模塊提供了四個功能:dumps、dump、loads、load
Functions:
dump(object, file)
dumps(object) -> string
load(file) -> object
loads(string) -> object
pickle.dumps(obj)--把任意對象序列化成一個str,然后,把這個str寫入文件
pickle.loads(string) --反序列化出對象
pickle.dump(obj,file) --直接把對象序列化后寫入文件
pickle.load(file) --從文件中反序列化出對象
#!/usr/bin/env python # -*- coding:utf-8 -*- import pickle accounts = { 1000: { 'name':'USERA', 'email': 'lijie3721@126.com', 'passwd': 'abc123', 'balance': 15000, 'phone': 13651054608, 'bank_acc':{ 'ICBC':14324234, 'CBC' : 235234, 'ABC' : 35235423 } }, 1001: { 'name': 'USERB', 'email': 'caixin@126.com', 'passwd': 'abc145323', 'balance': -15000, 'phone': 1345635345, 'bank_acc': { 'ICBC': 4334343, } }, } #把字典類型寫入到文件中 f = open('accounts.db','wb') f.write(pickle.dumps(accounts)) f.close() #2,反序列出對象並修改其內容,並將修改內容重新寫入文件 file_name = "accounts.db" f = open(file_name,'rb') account_dic = pickle.loads(f.read()) f.close() account_dic[1000]['balance'] -= 500 f = open(file_name,'wb') f.write(pickle.dumps(account_dic)) f.close() #3,反序列化對象並查看其內容 f = open('accounts.db','rb') acountdb = pickle.loads(f.read()) print(acountdb)
dic = { 'k1': [1,2], 'k2': [3,4] } #1.將對象寫入文件 f = open('test','wb') pickle.dump(dic,f) f.close() #2.將文件中內容反序列化,並讀出 f = open('test','rb') dic2 = pickle.load(f) print(dic2) f.close()
5.os模塊
作用:
用於提供系統級別的操作
函數:
1 os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
2 os.chdir("dirname") 改變當前腳本工作目錄;相當於shell下cd 3 os.curdir 返回當前目錄: ('.') 4 os.pardir 獲取當前目錄的父目錄字符串名:('..') 5 os.makedirs('dir1/dir2') 可生成多層遞歸目錄 6 os.removedirs('dirname1') 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推 7 os.mkdir('dirname') 生成單級目錄;相當於shell中mkdir dirname 8 os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname 9 os.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式打印 10 os.remove() 刪除一個文件 11 os.rename("oldname","new") 重命名文件/目錄 12 os.stat('path/filename') 獲取文件/目錄信息 13 os.sep 操作系統特定的路徑分隔符,win下為"\\",Linux下為"/" 14 os.linesep 當前平台使用的行終止符,win下為"\t\n",Linux下為"\n" 15 os.pathsep 用於分割文件路徑的字符串 16 os.name 字符串指示當前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 運行shell命令,直接顯示 18 os.environ 獲取系統環境變量 19 os.path.abspath(path) 返回path規范化的絕對路徑 20 os.path.split(path) 將path分割成目錄和文件名二元組返回 21 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素 23 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 24 os.path.isabs(path) 如果path是絕對路徑,返回True 25 os.path.isfile(path) 如果path是一個存在的文件,返回True。否則返回False 26 os.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回False 27 os.path.join(path1[, path2[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時間 29 os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間
6.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())
7.random
作用:
生成隨機變量
import random
print(random.random()) print(random.randint(1, 2)) print(random.randrange(1, 10))
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