python內置模塊[sys,os,os.path,stat]
內置模塊是python自帶功能,在使用內置模塊時,需要遵循 先導入在 使用
一、sys
| 對象 | 描述 |
| sys.argv | 命令行參數獲取,返回類型為列表,第一個元素為程序的本身的路徑 |
| sys.path | 返回模塊的搜索路徑列表,第一個元素為當前程序所在目錄;初始化時使用PYTHONPATH環境變量的值 |
| sys.modules.keys() | 返回所有已經導入的模塊列表 |
| sys.modules | 返回所有已經導入的模塊字典,key模塊名,value是模塊路徑 |
| sys.exc_info() | 獲取當前正在處理的異常類,exc_type,exc_value,exc_traceback當前處理的異常詳細信息 |
| sys.exc_clear() | 用來清除當前線程所出現的當前的或最近的錯誤信息 |
| sys.exec_prefix | 返回python文件安裝的位置 |
| sys.exit(n) | 退出程序,正常退出時exit(0) |
| sys.hexversion | 獲取python解釋程序的版本值,16進制格式如:0x020103F0 |
| sys.version | 獲取python解釋程序的版本信息 |
| sys.displayhook(value) | 如果value非空,這個函數會把他輸出到sys.stdout(詳細使用參考文檔) |
| sys.excepthook | 異常回溯相關 |
| sys.stdin | 標准輸入 |
| sys.stdin.read() | 輸入一行 |
| sys.stdin.readline() | 從標准輸入讀一行,sys.stdout.write("a") 屏幕輸出a |
| sys.stdout | 標准輸出 |
| sys.stdout.write(‘aaa’) | 標准輸出內容 |
| sys.stdout.writelines() | 無換行輸出 |
| sys.stderr | 錯誤相關 |
| sys.pathform | 返回操作系統平台名稱 |
| sys.byteorder | 本地字節規則的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’ |
| sys.copyright | 記錄python版權相關的東西 |
| sys.api_version | 解釋器的C的API版本 |
| sys.version_info | 'final'表示最終,也有'candidate'表示候選,表示版本級別,是否有后繼的發行 |
| sys.getdefaultencoding() | 返回當前你所用的默認的字符編碼格式 |
| sys.getfilesystemencoding() | 返回將Unicode文件名轉換成系統文件名的編碼的名字 |
| sys.builtin_module_names | Python解釋器導入的內建模塊列表 |
| sys.executable | Python解釋程序路徑 |
| sys.getwindowsversion() | 獲取Windows的版本 |
二、os模塊
| 對象 | 描述 |
| os.remove() | 刪除文件 |
| os.unlink() | 刪除文件 |
| os.rename() | 重命名文件 |
| os.listdir() | 列出指定目錄下所有文件 |
| os.curdir | 返回當前目錄: ('.') |
| os.pardir | 獲取當前目錄的父目錄字符串名:('..') |
| os.chdir() | 改變當前工作目錄 |
| os.getcwd() | 獲取當前文件路徑 |
| os.mkdir() | 新建目錄 |
| os.rmdir() | 刪除空目錄(刪除非空目錄, 使用shutil.rmtree()) |
| os.makedirs() | 創建多級目錄 |
| os.removedirs() | 刪除多級目錄 |
| os.stat(file) | 獲取文件屬性 |
| os.chmod(file) | 修改文件權限 |
| os.utime(file) | 修改文件時間戳 |
| os.name | 獲取操作系統標識,字符串指示當前使用平台。win->'nt'; Linux->'posix' |
| os.sep | 操作系統特定的路徑分隔符,win下為"\\",Linux下為"/" |
| os.linesep | 當前平台使用的行終止符,win下為"\r\n",Linux下為"\n" |
| os.pathsep | 用於分割文件路徑的字符串 |
| os.environ | 獲取系統環境變量 |
| os.system() | 執行操作系統命令 |
| os.execvp() | 啟動一個新進程 |
| os.access(path, mode) | 判斷文件權限 |
| os.wait() | 等待任何一個子進程結束,返回一個tuple,包括子進程的進程ID和退出狀態信息 |
三、os.path模塊
os.path.getctime()返回文件創返回文件大小 字節單位建時間 浮點型os.path.getsize()
| 對象 | 描述 |
| os.path.split(filename) | 將文件路徑和文件名分割(會將最后一個目錄作為文件名而分離) |
| os.path.splitext(filename) | 將文件路徑和文件擴展名分割成一個元組 |
| os.path.dirname(filename) | 返回文件路徑的目錄部分 |
| os.path.basename(filename) | 返回文件路徑的文件名部分 |
| os.path.join(dirname,basename) | 將文件路徑和文件名湊成完整文件路徑 |
| os.path.abspath(name) | 獲得絕對路徑 |
| os.path.splitunc(path) | 把路徑分割為掛載點和文件名 |
| os.path.normpath(path) | 規范path字符串形式 |
| os.path.exists() | 判斷文件或目錄是否存在 |
| os.path.isabs() | 如果path是絕對路徑,返回True |
| os.path.realpath(path) | 返回path的真實路徑 |
| os.path.relpath(path[, start]) | 從start開始計算相對路徑 |
| os.path.normcase(path) | 轉換path的大小寫和斜杠 |
| os.path.isdir(name) | 判斷name是不是一個目錄,name不是目錄就返回false |
| os.path.isfile(name) | 判斷name是不是一個文件,不存在返回false |
| os.path.islink() | 判斷文件是否連接文件,返回boolean |
| os.path.ismount() | 指定路徑是否存在且為一個掛載點,返回boolean |
| os.path.samefile() | 是否相同路徑的文件,返回boolean |
| os.path.getatime() | 返回最近訪問時間 浮點型 |
| os.path.getmtime() | 返回上一次修改時間 浮點型 |
| os.path.getctime() | 返回文件創建時間 浮點型 |
| os.path.getsize() | 返回文件大小 字節單位 |
| os.path.commonprefix(list) | 返回list(多個路徑)中,所有path共有的最長的路徑 |
| os.path.lexists | 路徑存在則返回True,路徑損壞也返回True |
| os.path.expanduser(path) | 把path中包含的"~"和"~user"轉換成用戶目錄 |
| os.path.expandvars(path) | 根據環境變量的值替換path中包含的”$name”和”${name}” |
| os.path.sameopenfile(fp1, fp2) | 判斷fp1和fp2是否指向同一文件 |
| os.path.samestat(stat1, stat2) | 判斷stat tuple stat1和stat2是否指向同一個文件 |
| os.path.splitdrive(path) | 一般用在windows下,返回驅動器名和路徑組成的元組 |
| os.path.walk(path, visit, arg) | 遍歷path,給每個path執行一個函數詳細見手冊 |
| os.path.supports_unicode_filenames | 設置是否支持unicode路徑名 |
四、stat模塊:描述os.stat()返回的文件屬性列表中各值的意義
| 對象 | 描述 |
| fileStats = os.stat(path) | 獲取到的文件屬性列表 |
| fileStats[stat.ST_MODE] | 獲取文件的模式 |
| fileStats[stat.ST_SIZE] | 文件大小 |
| fileStats[stat.ST_MTIME] | 文件最后修改時間 |
| fileStats[stat.ST_ATIME] | 文件最后訪問時間 |
| fileStats[stat.ST_CTIME] | 文件創建時間 |
| stat.S_ISDIR(fileStats[stat.ST_MODE]) | 是否目錄 |
| stat.S_ISREG(fileStats[stat.ST_MODE]) | 是否一般文件 |
| stat.S_ISLNK(fileStats[stat.ST_MODE]) | 是否連接文件 |
| stat.S_ISSOCK(fileStats[stat.ST_MODE]) | 是否COCK文件 |
| stat.S_ISFIFO(fileStats[stat.ST_MODE]) | 是否命名管道 |
| stat.S_ISBLK(fileStats[stat.ST_MODE]) | 是否塊設備 |
| stat.S_ISCHR(fileStats[stat.ST_MODE]) | 是否字符設置 |
五、hashlib:
用於加密相關的操作,代替md5模塊和sha模塊,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
>>> import hashlib ####### md5 ####### >>> hash.update(bytes('admin',encoding='utf-8')) >>> print(hash.hexdigest()) 21232f297a57a5a743894a0e4a801fc3 >>> print(hash.digest()) b'!#/)zW\xa5\xa7C\x89J\x0eJ\x80\x1f\xc3' ####### sha1 ####### >>> hash = hashlib.sha1() >>> hash.update(bytes('admin',encoding='utf-8')) >>> print(hash.hexdigest()) d033e22ae348aeb5660fc2140aec35850c4da997 >>> print(hash.digest()) b'\xd03\xe2*\xe3H\xae\xb5f\x0f\xc2\x14\n\xec5\x85\x0cM\xa9\x97' ####### sha256 ####### >>> hash = hashlib.sha256() >>> hash.update(bytes('admin',encoding='utf-8')) >>> print(hash.hexdigest()) 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 >>> print(hash.digest()) b'\x8civ\xe5\xb5A\x04\x15\xbd\xe9\x08\xbdM\xee\x15\xdf\xb1g\xa9\xc8s\xfcK\xb8\xa8\x1fo*\xb4H\xa9\x18' ####### sha384 ####### >>> hash = hashlib.sha384() >>> hash.update(bytes('admin',encoding='utf-8')) >>> print(hash.hexdigest()) 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2 ec9f10290cdc0782 >>> print(hash.digest()) b'\x9c\xa6\x94\xa9\x02\x85\xc04C,\x95PB\x1b{\x9d\xbd\\\x0fKfs\xf0_m\xbc\xe5\x80R\xba \xe4$\x80A\x95n\xe8\xc9\xa2\xec\x9f\x10)\x0c\xdc\x07\x82' ####### sha512 ####### >>> hash = hashlib.sha512() >>> hash.update(bytes('admin',encoding='utf-8')) >>> print(hash.hexdigest()) c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec >>> print(hash.digest()) b'\xc7\xadD\xcb\xadv*]\xa0\xa4R\xf9\xe8T\xfd\xc1\xe0\xe7\xa5*8\x01_#\xf3\xea\xb1\xd8\x0b\x93\x1d\xd4rcM\xfa\xc7\x1c\xd3N\xbc5\xd1j\xb7\xfb\x8a\x90\xc8\x1f\x97Q\x13\xd6\xc7S\x8d\xc6\x9d\xd8\xde\x90w\xec'
以上加密算法雖然非常厲害,但存在缺陷,即:通過密碼庫可以反解.所以,有必要對加密算法中添加自定義key再來做加密.
>>> import hashlib >>> hash = hashlib.md5(bytes('89oaFs09f',encoding='utf-8')) >>> hash.update(bytes('admin',encoding='utf-8')) >>> print(hash.hexdigest()) 0f102151d38af213af2d4f73d459d69c >>> print(hash.digest()) b'\x0f\x10!Q\xd3\x8a\xf2\x13\xaf-Os\xd4Y\xd6\x9c'
python內置還有一個hmac模塊,它內部對我們創建key和內容進行進一步的處理,然后再加密
>>> import hmac >>> h = hmac.new(bytes('898oaFs09f',encoding='utf-8')) >>> h.update(bytes('admin',encoding='utf-8')) >>> print(h.hexdigest()) 17186c513df61e8b3fb4a134f474b130 >>> print(h.digest()) b'\x17\x18lQ=\xf6\x1e\x8b?\xb4\xa14\xf4t\xb10'
六、random模塊:
| 對象 | 描述 |
| random.random() | 產生0-1的隨機浮點數 |
| random.uniform(a, b) | 產生指定范圍內的隨機浮點數 |
| random.randint(a, b) | 產生指定范圍內的隨機整數 |
| random.randrange([start], stop[, step]) | 從一個指定步長的集合中產生隨機數 |
| random.choice(sequence) | 從序列中產生一個隨機數 |
| random.shuffle(x[, random]) | 將一個列表中的元素打亂 |
| random.sample(sequence, k) | 從序列中隨機獲取指定長度的片斷 |
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)
隨機驗證碼
七、time&datetime&date模塊
| datetime.date.today() | 本地日期對象,(用str函數可得到它的字面表示('2016-12-24')) |
| datetime.date.isoformat(obj) | 當前[年-月-日]字符串表示('2016-12-24') |
| datetime.date.fromtimestamp() | 返回一個日期對象,參數是時間戳,返回 [年-月-日] |
| datetime.date.weekday(obj) | 返回一個日期對象的星期數,周一是0 |
| datetime.date.isoweekday(obj) | 返回一個日期對象的星期數,周一是1 |
| datetime.date.isocalendar(obj) | 把日期對象返回一個帶有年周星期的元組 |
| datetime.datetime.today() | 返回一個包含本地時間(含微秒數)的datetime對象,如datetime.datetime(2016, 12, 24, 11, 1, 59, 365506) |
| datetime.datetime.now() | 返回指定時區的datetime對象,datetime.datetime(2016, 12, 24, 11, 2, 50, 132996) |
| datetime.datetime.utcnow() | 返回一個零時區的datetime對象 |
| datetime.utcfromtimestamp(timestamp) | 按時間戳返回一個UTC-datetime對象 |
| datetime.datetime.strptime('2014-03-16 12:21:21',"%Y-%m-%d %H:%M:%S") | 將字符串轉為datetime對象,datetime.datetime.strptime('2016-01-01 12:11:12','%Y-%m-%d %X') |
| datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') | 將datetime對象轉換為str表示形式 |
| datetime.date.today().timetuple() | 轉換為時間戳datetime元組對象,可用於轉換時間戳 |
| datetime.datetime.now().timetuple() | 轉換為時間戳datetime元組對象,可用於轉換時間戳 |
| time.mktime(timetupleobj) | 將datetime元組對象轉為時間戳 |
| time.time() | 當前時間戳 |
| time.localtime | 當前時間對象 |
| time.gmtime | 當前UTC時間對象 |
#_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) #返回處理器時間,3.3開始已廢棄 , 改成了time.process_time()測量處理器運算時間,不包括sleep時間,不穩定,mac上測不出來 # print(time.altzone) #返回與utc時間的時間差,以秒計算\ # print(time.asctime()) #返回時間格式"Fri Aug 19 11:14:16 2016", # print(time.localtime()) #返回本地時間 的struct time對象格式 # print(time.gmtime(time.time()-800000)) #返回utc時間的struc時間對象格式 # print(time.asctime(time.localtime())) #返回時間格式"Fri Aug 19 11:14:16 2016", #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上 # 日期字符串 轉成 時間戳 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #將 日期字符串 轉成 struct時間對象格式 # print(string_2_struct) # # # struct_2_stamp = time.mktime(string_2_struct) #將struct時間對象轉成時間戳 # print(struct_2_stamp) #將時間戳轉為字符串格式 # print(time.gmtime(time.time()-86640)) #將utc時間戳轉換成struct_time格式 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #將utc struct_time格式轉成指定的字符串格式 #時間加減 import datetime # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925 #print(datetime.date.fromtimestamp(time.time()) ) # 時間戳直接轉成日期格式 2016-08-19 # print(datetime.datetime.now() ) # print(datetime.datetime.now() + datetime.timedelta(3)) #當前時間+3天 # print(datetime.datetime.now() + datetime.timedelta(-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)) #時間替換
模塊詳解:http://www.cnblogs.com/fclbky/articles/4098204.html
格式化字符串:strftime() 和 strptime()
date, datetime, 和 time 對象均支持使用 strftime(format) 方法,將指定的日期或時間轉換為自定義的格式化字符串
相反的,datetime.strptime() 類方法卻是把格式化字符串轉換為 datetime 對象
| 格式化指令 | 含義 |
| %a | 星期的簡寫(星期一 ~ 天:Mon, Tue, Wed, Thu, Fri, Sat, Sun) |
| %A | 星期的全寫(星期一 ~ 天:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) |
| %w | 在一個星期中的第幾天( 0 表示星期天 ... 6 表示星期六) |
| %d | 在一個月中的第幾天(01, 02, ..., 31) |
| %b | 月份的簡寫(一月 ~ 十二月:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec) |
| %B | 月份的全寫(一月 ~ 十二月:January, February, March, April, May, June, July, August, September, October, November, December) |
| %m | 月份(01, 02, ..., 12) |
| %y | 用兩個數字表示年份(例如 2014年 == 14) |
| %Y | 用四個數字表示年份 |
| %H | 二十四小時制(00, 01, ..., 23) |
| %I | 十二小時制(01, 02, ..., 11) |
| %p | AM 或者 PM |
| %M | 分鍾(00, 01, ..., 59) |
| %S | 秒(00, 01, ..., 59) |
| %f | 微秒(000000, 000001, ..., 999999) |
| %z | 與 UTC 時間的間隔 ;如果是本地時間,返回空字符串((empty), +0000, -0400, +1030) |
| %Z | 時區名稱;如果是本地時間,返回空字符串((empty), UTC, EST, CST) |
| %j | 在一年中的第幾天(001, 002, ..., 366) |
| %U | 在一年中的第幾周,星期天作為第一天(00, 01, ..., 53) |
| %W | 在一年中的第幾周,星期一作為第一天(00, 01, ..., 53) |
| %c | 用字符串表示日期和時間(Tue Aug 16 21:30:00 2014) |
| %x | 用字符串表示日期(08/16/14) |
| %X | 用字符串表示時間(21:30:00) |
| %% | 表示百分號 |
