day 19 - 1 模塊

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 
struct_time 元素

 

咱們來看這三種格式的例子

#導入時間模塊
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)是建立時間(詳細信息參見平臺的文檔)
stat 結構
os.sep         輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/"
os.linesep     輸出當前平臺使用的行終止符,win下爲"\r\n",Linux下爲"\n"
os.pathsep     輸出用於分割文件路徑的字符串 win下爲;,Linux下爲:
os.name        輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
os 模塊的屬性

 

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)
相關文章
相關標籤/搜索