1. 程式人生 > >python之路-day21-模組介紹1

python之路-day21-模組介紹1

 

 

一、今日內容大綱

  1、關於模組

    import

    from xxx import xxx    絕對匯入

  2、Collections

    1)Counter 計數器 

    2)棧:先進後出

       佇列:先進先出

       deque : 雙向佇列

    3)defaultdict  預設值字典

    4)namedtuple 元祖命名。struct_time 結構化時間就是命名元祖

    5)OredereDict  有序字典,按照我們儲存的順序儲存

  3、time 時間模組

    1)獲取系統時間 time.time()  時間戳

    2)格式化時間  strftime()  時間格式: %Y-%m-%d %H:%M:%S  or   %Y-%m-%d

    3) 結構化時間:time.gmetime()  time.localtime()----東八區

    4)把格式化時間轉化為結構時間  strptime()

      把結構時間轉化為時間戳  mktime()

  4、os和sys

    os.sep 檔案路徑分隔符

    sys.path  python查詢模組的路徑

 


二、Collections 模組

  1、Counter計數器 

from collections import Counter

s = " i am sylar, i have a dream,,,"

ss = Counter(s) # 計算⼀個字串中每個字元出現的次數
print(ss)

dic = {}
for el in s:   # 如果字典中包含有給定鍵,則返回該鍵對應的值,否則返回為該鍵設定的值
    dic[el] = dic.setdefault(el,0) + 1

print(dic)


##結果:
Counter({' ': 7, 'a': 5, ',': 4, 'i': 2, 'm
': 2, 'r': 2, 'e': 2, 's': 1, 'y': 1, 'l': 1, 'h': 1, 'v': 1, 'd': 1}) {' ': 7, 'i': 2, 'a': 5, 'm': 2, 's': 1, 'y': 1, 'l': 1, 'r': 2, ',': 4, 'h': 1, 'v': 1, 'e': 2, 'd': 1}

  

  2. deque 雙向佇列.
    (重點)說雙向佇列之前我們需要了解兩種資料結構. 1. 棧, 2. 佇列
    1. 棧: FILO. 先進後出 -> 砌牆的磚頭, 老師傅做饅頭
    2. 佇列: FIFO. 先進先出 -> 買火⻋票排隊, 所有排隊的場景 

# 棧 (先進後出)

# class Stack:
#     def __init__(self,size):
#         self.index = 0  # 棧頂指標
#         self.lst = []
#         self.size = size
#
#     # 給棧新增元素
#     def push(self,item):
#         if self.index == self.size:
#             #棧已經滿了,不能再裝東西了
#             pass
#         self.lst.insert(self.index,item)  # 對於空列表,需要用insert插入內容
#         self.index += 1 # 棧頂指標向上移動
#
#     # 從棧中獲取資料
#     def pop_item(self):
#         if self.index == 0:
#             pass
#         self.index -= 1  # 頂指標向下移動
#         item = self.lst.pop(self.index)  # 獲取元素刪除
#         return item
#
# s = Stack(5)


# 佇列
# import queue  先進先出
#
#
# q = queue.Queue() # 建立佇列
# q.put("李嘉誠")
# q.put("深圳吳彥祖")
# q.put("周潤發")
# q.put("韓寒")
#
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# # print(q.get()) # 如果佇列中沒有元素了,繼續獲取的話會發生阻塞
# print("done")


# # 雙向佇列
#
# from collections import deque
#
# q = deque()     # 建立一個雙向佇列
# q.append("高圓圓")
# q.append("江疏影")
# q.appendleft("趙又廷")
# q.appendleft("劉某某")
#
# print(q.pop())
# print(q.pop())
# print(q.popleft())
# print(q.popleft())
# print(q.pop())

 

  3、namedtuple 命名元組

    命名元組, 顧名思義. 給元組內的元素進⾏命名. 比如. 我們說(x, y) 這是⼀個元組. 同時. 我們還可以認為這是⼀個點座標.

    這時, 我們就可以使⽤namedtuple對元素進⾏命名

 

# from collections import namedtuple
# point = namedtuple("Point", ["x","y","z"])
# p = point(1,23,22)
# print(p.x)
# print(p.y)
# print(p.z)
# print(p)

 

  4、defaultdict: 可以給字典設定預設值. 當key不存在時. 直接獲取預設值:

# from collections import defaultdict
#
# lst = [11,22,33,44,55,66,77,88]
#
# d = defaultdict(list)
#
# for el in lst:
#     if el < 66:
#         d["key1"].append(el)
#     else:
#         d["key2"].append(el)
# print(d)

 

三、time模組

# time
# import time
# while 1:
#     s = time.strftime("%Y-%m-%d %H:%M:%S")
#     print(s)
#     time.sleep(1)

# import time
#
# t = time.gmtime(971150400.0)
# s = time.strftime("%Y-%m-%d %H:%M:%S",t)
# print(s)

# s = "2000-10-10 12:00:00"
# t = time.strptime(s,"%Y-%m-%d %H:%M:%S")
# print(time.mktime(t))
# s = "2020-10-01 12:18:12"
# t = time.strptime(s, "%Y-%m-%d %H:%M:%S") # 轉化成結構時間
# print(time.mktime(t)) # 轉換成時間戳


# 時間顯示中文
# import locale,time
#
# locale.setlocale(locale.LC_COLLATE,"chinese")
# print(time.strftime("%Y年%m月%d日"))
#

# 計算時間差
# import time
# old_time = time.mktime(time.strptime("2018-11-10 10:30:00","%Y-%m-%d %H:%M:%S"))
# nowtime = time.mktime(time.strptime("2018-11-10 12:00:00","%Y-%m-%d %H:%M:%S"))
# dif_time = nowtime - old_time
# total_min = int(dif_time / 60)
# hour = int(total_min / 60)
# min = int(total_min % 60)
# print("時間差為:%s小時%s分"%(hour,min))

 

四、random 模組

import random

print(random.randint(1,3)) # 1-3隨機取一個,前後都為閉區間
print(random.random())  # 0-1 之間的小數
print(random.uniform(3,10)) # 3-10 之間的隨機小數
print(random.randrange(1,10,3)) # [1,10) 從奇數中獲取隨機數

lst = [1,2,3,4,5,6]
random.shuffle(lst)  # 打散
print(lst)           #[6, 1, 5, 3, 2, 4]
print(random.choice([1, '周杰倫', ["蓋倫", "胡辣湯"]])) #取一個元素
print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2個組合

 

五、os模組

import 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的⼤⼩
# 特殊屬性:
os.sep #輸出作業系統特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep #輸出當前平臺使⽤的⾏終⽌符,win下為"\r\n",Linux下為"\n"
os.pathsep #輸出⽤於分割⽂件路徑的字串 win下為;,Linux下為:
os.name #輸出字串指示當前使⽤平臺。win->'nt'; Linux->'posix'

os.stat() #屬性解讀:
stat #結構:
st_mode: inode 保護模式
st_ino: inode 節點號。
st_dev: inode 駐留的裝置。
st_nlink: inode 的連結數。
st_uid: 所有者的⽤戶ID。
st_gid: 所有者的組ID。
st_size: 普通⽂件以位元組為單位的⼤⼩;包含等待某些特殊⽂件的資料。
st_mtime: 最後⼀次修改的時間。
st_ctime: 由作業系統報告的"ctime"。在某些系統上(如Unix)是最新的元資料更改的時間,在
其它系統上(如Windows)是建立時間(詳細資訊參⻅平臺的⽂檔)

 

六、sys模組

 

所有和python直譯器相關的都在sys模組. 
sys.argv 命令⾏引數List,第⼀個元素是程式本身路徑
sys.exit(n) 退出程式,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version 獲取Python解釋程式的版本資訊
sys.path 返回模組的搜尋路徑,初始化時使⽤PYTHONPATH環境變數的值
sys.platform 返回作業系統平臺名稱