017_os_sys_time_collection_random 模塊

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

  • 使用list存儲數據時,按索引訪問元素很快,可是插入和刪除元素就很慢了,由於list是線性存儲,數據量大的時候,插入和刪除效率很低。
  • deque是爲了高效實現插入和刪除操做的雙向列表,適合用於隊列和棧:
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 當前時區的名稱 %% %號自己
python中時間日期格式化符號

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

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('您能夠使用計算機了')
相關文章
相關標籤/搜索