collections 模塊html
在內置數據類型(dict、list、set、tuple)的基礎上,collections 模塊還提供了幾個額外的數據類型:Counter、deque、defaultdict、namedtuple 和 OrderedDict 等node
1.namedtuple: 生成可使用名字來訪問元素內容的 tuplepython
2.deque: 雙端隊列,能夠快速的從另一側追加和推出對象shell
3.Counter: 計數器,主要用來計數json
4.OrderedDict: 有序字典bash
5.defaultdict: 帶有默認值的字典app
namedtupledom
咱們來看一個座標軸的例子ide
#namedtuple from collections import namedtuple Point = namedtuple('point',['x','y','z']) p1 = Point(1,2,3) p2 = Point(3,2,1) print(p1.x) print(p2.z) print(p1,p2)
撲克牌例子,花色與數字函數
#namedtuple from collections import namedtuple Card = namedtuple('card',['suits','number']) c = Card('紅桃',2) print(c.suits) print(c.number) print(c)
deque 雙端隊列
咱們先來看一個隊列
#隊列 用於 list 很長時,由於刪除與插入會變的很慢 import queue q =queue.Queue() #建立一個空隊列 q.put(2) #往隊列中放值 q.put(5) q.put(7) #print(q.qsize()) #獲取數列的大小,在值取完時,大小爲 0 print(q.get()) #從隊列中取值,一次只取一個 print(q.get()) print(q.get()) #print(q.get()) #當去完時,進入阻塞狀態
接着來看下面的雙端隊列
#使用 list 存儲數據時,按索引訪問元素很快,可是插入和刪除元素就很慢了, #由於 list 是線性存儲,數據量大的時候,插入和刪除效率很低。 #deque 是爲了高效實現插入和刪除操做的雙向列表,適合用於隊列和棧: from collections import deque dq = deque([1,2]) dq.append('a') # 從後面放數據 [1,2,'a'] dq.appendleft('b') # 從前面放數據 ['b',1,2,'a'] dq.insert(2,3) #['b',1,3,2,'a'] print(dq.pop()) # 從後面取數據 print(dq.pop()) # 從後面取數據 print(dq.popleft()) # 從前面取數據 print(dq)
OrderedDict 有序字典
佔內存:列表 < 字典 < 有序字典
from collections import OrderedDict od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(od) # OrderedDict 的 Key 是有序的 print(od['a']) for k in od: print(k) #此時 k 的值就是有序的
defaultdict 默認值的字典
咱們直接看例子
#有以下值集合 [11,22,33,44,55,66,77,88,99,90...],將全部大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。 from collections import defaultdict values = [11, 22, 33,44,55,66,77,88,99,90] my_dict = defaultdict(list) #這裏能夠設置默認爲 list,在下面就能夠少一層關因而否是列表的判斷 for value in values: if value>66: my_dict['k1'].append(value) else: my_dict['k2'].append(value) print(my_dict)
Counter(沒什麼用)
Counter 類的目的是用來跟蹤值出現的次數。它是一個無序的容器類型,以字典的鍵值對形式存儲,其中元素做爲 key,其計數做爲 value。計數值能夠是任意的 Interger(包括 0 和負數)。Counter 類和其餘語言的 bags 或 multisets 很類似
from collections import Counter c = Counter('abcdeabcdabcaba') print(c) #輸出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
其餘詳細內容 http://www.cnblogs.com/Eva-J/articles/7291842.html
xml 模塊
xml是實現不一樣語言或程序之間進行數據交換的協議,跟json差很少,但json使用起來更簡單
time 模塊
經常使用方法
#經常使用方法 import time time.sleep(secs) #(線程)推遲指定的時間運行。單位爲秒。 time.time() #獲取當前時間戳
表示時間的三種方式:
分別爲:時間戳、元組(struct_time)、格式化的時間字符串
一、時間戳(timestamp) :一般來講,時間戳表示的是從 1970 年 1 月 1 日 00:00:00 開始按秒計算的偏移量。咱們運行 「 type(time.time()) 」 ,返回的是 float 類型
二、格式化的時間字符串(Format String):‘ 1999-12-06 ’
%y 兩位數的年份表示(00-99) %Y 四位數的年份表示(000-9999) %m 月份(01-12) %d 月內中的一天(0-31) %H 24小時制小時數(0-23) %I 12小時制小時數(01-12) %M 分鐘數(00=59) %S 秒(00-59) %a 本地簡化星期名稱 %A 本地完整星期名稱 %b 本地簡化的月份名稱 %B 本地完整的月份名稱 %c 本地相應的日期表示和時間表示 %j 年內的一天(001-366) %p 本地A.M.或P.M.的等價符 %U 一年中的星期數(00-53)星期天爲星期的開始 %w 星期(0-6),星期天爲星期的開始 %W 一年中的星期數(00-53)星期一爲星期的開始 %x 本地相應的日期表示 %X 本地相應的時間表示 %Z 當前時區的名稱 %% %號自己
三、元組(struct_time):struct_time 元組共有9個元素,分別爲:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天,是不是夏令時)
# 索引(Index,屬性(Attribute,值(Values) # 0 tm_year(年) 好比2011 # 1 tm_mon(月) 1 - 12 # 2 tm_mday(日) 1 - 31 # 3 tm_hour(時) 0 - 23 # 4 tm_min(分) 0 - 59 # 5 tm_sec(秒) 0 - 60 # 6 tm_wday(weekday) 0 - 6(0表示週一) # 7 tm_yday(一年中的第幾天) 1 - 366 # 8 tm_isdst(是不是夏令時) 默認爲0
咱們來看這三種格式的例子
#導入時間模塊 import time #時間戳 time.time() #時間字符串 time.strftime("%Y-%m-%d %X") time.strftime("%Y-%m-%d %H-%M-%S") #時間元組:localtime將一個時間戳轉換爲當前時區的struct_time time.localtime() time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=13, tm_min=59, tm_sec=37, tm_wday=0, tm_yday=205, tm_isdst=0)
小結:時間戳是計算機可以識別的時間;時間字符串是人可以看懂的時間;元組則是用來操做時間的
格式轉換
import time # 時間戳和結構化時間 t = time.time() print(t) print(time.localtime(3000000000)) #localtime 時間戳時間轉化爲結構化時間 print(time.gmtime(t)) print(time.mktime(time.localtime())) #結構化時間轉化爲時間戳時間 #格式化時間與結構化時間 print(time.strptime('2000-12.31','%Y-%m.%d')) #格式化時間轉爲結構化時間 print(time.strftime('%m/%d/%Y %H:%M:%S',time.localtime(3000000000))) #結構化時間轉爲格式化時間
#結構化時間 --> %a %b %d %H:%M:%S %Y串 #time.asctime (結構化時間) 若是不傳參數,直接返回當前時間的格式化串 time.asctime(time.localtime(1500000000)) time.asctime() #時間戳 --> %a %b %d %H:%M:%S %Y串 #time.ctime(時間戳) 若是不傳參數,直接返回當前時間的格式化串 time.ctime() time.ctime(1500000000)
random 模塊
隨機數
import random #隨機小數 ran = random.random() # 大於0且小於1之間的小數 ran2 = random.uniform(1,3) #大於1小於3的小數 print(ran,ran2) #好比:發紅包 #隨機整數 ran3 = random.randint(1,5) # 大於等於1且小於等於5之間的整數 ran4 = random.randrange(1,10,2) # 大於等於1且小於10之間的奇數 print(ran3,ran4)
#隨機選擇值一個返回 ran5 = random.choice([1,'23',[4,5]]) #1或者23或者[4,5] #隨機選擇多個返回,返回的個數爲函數的第二個參數 ran6 = random.sample([1,'23',[4,5]],2) #列表元素任意2個組合 print(ran5,ran6)
打亂列表順序
import random item=[1,3,5,7,9] random.shuffle(item) # 打亂次序 print(item) random.shuffle(item) print(item)
os模塊
os模塊是與操做系統交互的一個接口
#注意:os.stat('path/filename') 獲取文件/目錄信息 的結構說明 os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 os.remove() 刪除一個文件 os.rename("oldname","newname") 重命名文件/目錄 os.stat('path/filename') 獲取文件/目錄信息 os.system("bash command") 運行shell命令,直接顯示 os.popen("bash command).read() 運行shell命令,獲取執行結果 os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd os.path 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所指向的文件或者目錄的最後修改時間 os.path.getsize(path) 返回path的大小
stat 結構: st_mode: inode 保護模式 st_ino: inode 節點號 st_dev: inode 駐留的設備 st_nlink: inode 的連接數 st_uid: 全部者的用戶 ID st_gid: 全部者的組ID st_size: 普通文件以字節爲單位的大小;包含等待某些特殊文件的數據 st_atime: 上次訪問的時間 st_mtime: 最後一次修改的時間 st_ctime: 由操做系統報告的"ctime",在某些系統上(如Unix)是最新的元數據更改的時間,在其它系統上(如 Windows)是建立時間(詳細信息參見平臺的文檔)
os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" os.linesep 輸出當前平臺使用的行終止符,win下爲"\r\n",Linux下爲"\n" os.pathsep 輸出用於分割文件路徑的字符串 win下爲;,Linux下爲: os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
sys 模塊
sys 模塊是與 python 解釋器交互的一個接口
sys.argv 命令行參數List,第一個元素是程序自己路徑 sys.exit(n) 退出程序,正常退出時exit(0),錯誤退出sys.exit(1) sys.version 獲取Python解釋程序的版本信息 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 sys.platform 返回操做系統平臺名稱
import sys try: sys.exit(1) except SystemExit as e: print(e)
一個簡單的例子
#文件名:test.py import sys ret = sys.argv name = ret[1] pwd = ret[2] if name == 'ysg' and pwd == '123': print('登錄成功') else: print("錯誤的用戶名和密碼") sys.exit() print('你可使用計算器了') #執行 python test.py ysg 123
異常處理和 status
import sys try: sys.exit(1) except SystemExit as e: print(e)