1,collections模塊 (python中的擴展數據類型)html
在內置數據類型(dict、list、set、tuple)的基礎上,collections模塊還提供了幾個額外的數據類型: node
1. namedtuple: 生成能夠使用名字來訪問元素內容的tuplepython
2. deque: 雙端隊列,能夠快速的從另一側追加和推出對象shell
3. Counter: 計數器,主要用來計數 bash
4. OrderedDict: 有序字典 app
5. defaultdict: 帶有默認值的字典dom
1.1,namedtuple('名稱', [屬性list]):ide
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x) #>>>1
print(p.y) #>>>2
座標和半徑表示一個圓,也能夠用namedtuple
定義:函數
Circle = namedtuple('Circle', ['x', 'y', 'r'])
1.2,deque 雙向列表 post
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x') #添加
q.appendleft('y') #在左側添加
print(q) # deque(['y', 'a', 'b', 'c', 'x'])
q.insert(1,3)
print(q) # deque(['y', 3, 'a', 'b', 'c', 'x'])
print(q.pop()) #從後面取數據
print(q.popleft()) #從前面取數據
1.3,OrderedDict 使字典的鍵按照插入時或建立時的序排列
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d) # dict的Key是無序的 #>>>{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的
#OrderedDict([('a', 1), ('b', 2), ('c', 3)])
1.4,defaultdict 使用dict
時,若是引用的Key不存在,就會拋出KeyError
。若是但願key不存在時,返回一個默認值,就能夠用defaultdict
defaultdict類就好像是一個dict,可是它是使用一個類型來初始化的:
1.4.1,接受一個類型做爲參數,當所訪問的鍵不存在的時候,能夠實例化一個值做爲默認值:
有以下值集合 [11,22,33,44,55,66,77,88,99,90...],將全部大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。即: {'k1': 大於66 , 'k2': 小於66}
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list) # 設定一個類型來初始化,即設定鍵值類型
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
print(my_dict)
# defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
1.4.2,該類除了接受類型名稱做爲初始化函數的參數以外,還能夠使用任何不帶參數的可調用函數,到時該函數的返回結果做爲默認值,這樣使得默認值的取值更加靈活。
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
print(dd['key1']) # key1存在 #>>>'abc'
print(dd['key2']) # key2不存在,返回默認值 #>>>'N/A'
必須是可調用的,例如5就不行,由於5是個值,是不可調用的。若是想將默認鍵值設置成數值,能夠用返回值的形式是
form collectinos import defaultdict
d = defaultdict(lambda : 5)
print(d['k'])
1.4.3,詳細的內容:http://kodango.com/understand-defaultdict-in-python
1.5,Counter Counter類的目的是用來跟蹤值出現的次數,用字典保存
當所訪問的鍵不存在時,返回0,而不是KeyError;不然返回它的計數
from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
其餘詳細內容 :Counter()
2,time 時間模塊
#經常使用方法
time.sleep(secs) #(線程)推遲指定的時間運行。單位爲秒。 time.time() #獲取當前時間戳
2.1,表示時間的三種方式:時間戳、元組(struct_time)、格式化的時間字符串
字符串——格式化時間:給人看
時間戳——float時間:給計算機看的
結構化時間——元組:計算用的
(1)時間戳(timestamp) :一般來講,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。咱們運行「type(time.time())」,返回的是float類型。
(2)格式化的時間字符串(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 當前時區的名稱 %% %號自己
(3)元組(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
#時間戳
print(time.time()) #>>>1500875844.800804
#時間字符串
print(time.strftime("%Y-%m-%d %X")) #>>>'2017-07-24 13:54:37'
print(time.strftime("%Y-%m-%d %H-%M-%S")) #>>>'2017-07-24 13-55-04'
#時間元組:localtime將一個時間戳轉換爲當前時區的struct_time
print(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)
2.2,幾種格式之間的轉換
import time t1 = time.gmtime(1500000000) #將時間戳轉化爲 UTC時間,與英國倫敦當地時間一致 t2 = time.localtime(1500000000) #將時間戳轉化爲 當地時間,即你所在位置的時間
2.2.1,時間戳 和 結構化時間
import time t = time.time() print(t) print(time.localtime(3000000000)) print(time.gmtime(t)) #時間戳——>結構化時間 #time.mktime(結構化時間) time_tuple = time.localtime(1500000000) print(time.mktime(time_tuple)) #結構化時間——>時間戳
2.2.2,字符串時間 和 結構化時間
import time #time.strftime("格式定義","結構化時間") 結構化時間參數若不傳,則顯示當前時間 t1 = time.strftime("%Y-%m-%d %X") # '2017-07-24 14:55:36' t2 = time.strftime("%Y-%m-%d",time.localtime(1500000000)) # '2017-07-14' print(t1,t2)
#結構化時間 --> %a %b %d %H:%M:%S %Y串
#time.asctime(結構化時間) 若是不傳參數,直接返回當前時間的格式化串
>>>time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
>>>time.asctime()
'Mon Jul 24 15:18:33 2017'
#時間戳 --> %a %b %d %H:%M:%S %Y串
#time.ctime(時間戳) 若是不傳參數,直接返回當前時間的格式化串
>>>time.ctime()
'Mon Jul 24 15:19:07 2017'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'
3,random 隨機生成
>>> import random
#隨機小數
>>> random.random() # 大於0且小於1之間的小數
0.7664338663654585
>>> random.uniform(1,3) #大於1小於3的小數
1.6270147180533838
#恆富:發紅包
#隨機整數
>>> random.randint(1,5) # 大於等於1且小於等於5之間的整數
>>> random.randrange(1,10,2) # 大於等於1且小於10之間的奇數
#隨機選擇一個返回
>>> random.choice([1,'23',[4,5]]) # #1或者23或者[4,5]
#隨機選擇多個返回,返回的個數爲函數的第二個參數
>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2個組合
[[4, 5], '23']
#打亂列表順序
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打亂次序
>>> item
[5, 1, 3, 7, 9]
>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]
4,os模塊 是與操做系統交互的一個接口
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的大小
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'
5,sys模塊
sys模塊是與python解釋器交互的一個接口
sys.argv 命令行參數List,第一個元素是程序自己路徑
sys.exit(n) 退出程序,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version 獲取Python解釋程序的版本信息
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform 返回操做系統平臺名稱
5.1,sys.argv
只能在命令行執行該程序,在命令行輸入該文件名和須要傳入的變量,輸入的變量經過sys.argv接受並存入列表
ret = sys.argv name = ret[1] pwd = ret[2] if name == 'alex' and pwd =='1234': print('登錄成功') else: print('錯誤的用戶名和密碼') sys.exit() print('您能夠使用計算機了')