1. 程式人生 > >python day21常用模組

python day21常用模組

⼀. 模組的簡單認識
什麼是模組. 模組就是我們把裝有特定功能的程式碼進行歸類的結果. 從程式碼編寫的單位來看我們的程式, 從小到大的順序: 一條程式碼 < 語句塊 < 程式碼塊(函式, 類) < 模組. 我們目前寫的所有的py檔案都是模組.

 

引入模組的⽅方式:
  1. import 模組
  2. from xxx import 模組

二.collection模組

collections模組主要封裝了了⼀一些關於集合類的相關操作,還提供了⼀些除了基本資料型別以外的資料集合型別. Counter, deque, OrderDict, defaultdict以及namedtuple.

1.Counter

Counter是一個計數器,主要用來計數.

# 計算一個字元中每個字元出現的次數:
#方法一
s = "ccj like pig"
dic={}
for c in s:
    dic[c]=dic.setdefault(c,0)+1
print(dic) 
#{'c': 2, 'j': 1, ' ': 2, 'l': 1, 'i': 2, 'k': 1, 'e': 1, 'p': 1, 'g': 1}

#方法二(Counter):
from collections import Counter
print(Counter(s)) 
#Counter({'c': 2, ' ': 2, 'i': 2, 'j': 1, 'l': 1, 'k': 1, 'e': 1, 'p': 1, 'g': 1})

 

2.deque雙向佇列.

先了解兩種資料結構:

  1.棧 : FILO. 取資料時 會''先進後出''.(砌牆後取磚頭)

  2.佇列 :  FILO.取資料時 會''先進先出''. (類似排隊)

# 佇列: python提供了queue模組. 使用起來非常方便
import queue
q = queue.Queue()
q.put("")
q.put("")
q.put("")

print(q.get())
print(q.get())
print(q.get())
print(q.get()) #這裡無資料可取
# 注意. 如果佇列里沒有元素了. 再也拿不出來元素了,此時程式會阻塞.

 

 

deque, 注意, 此隊列是collections中的.

from collections import deque
q = deque()
q.append("張開") # 右側新增
q.append("貝爾")
q.appendleft("趙廷") # 左側新增
q.appendleft("高圓")
print(q)              #deque(['高圓', '趙廷', '張開', '貝爾'])
print(q.pop())     #貝爾   #右側刪除
print(q.popleft()) #高圓    #左側刪除

 

 

3. namedtuple 命名元組

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

from collections import namedtuple
# 自己定義了一個元組, 這其實就是建立了一個類
nt = namedtuple("point", ["x", "y"])
p = nt(1, 2)
print(p)  #point(x=1, y=2)
print(p.x)# 1
print(p.y)   # 2

 

 

4.defaultdict

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

from collections import defaultdict
dd = defaultdict(list) # 預設值list
print(dd['哈哈']) # [ ] 當key不存在的時候. 會自動執行構造方法中傳遞的內容.

 

lst =[11,22,33,44,55,66,77,88]
d=defaultdict(list)   #建立一個字典,預設字典裡是列表
for el in lst:
    if el <66:
        d['K1'].append(el)  #字典裡Key不存在,則取預設值空列表[], dic['key]會建立key.
    else:
        d['K2'].append(el)
print(d)  
#defaultdict(<class 'list'>, {'K1': [11, 22, 33, 44, 55], 'K2': [66, 77, 88]})

 

 

三. time 時間模組

import time

print(time.time()) #打印出當前系統時間(時間戳)  結果為一串數字如:1538927647.483177

 

在python中時間分成三種表現形式:

1. 時間戳(timestamp). 時間戳使用的是從1970年01月01⽇00點00分00秒到現在⼀共經過了多少秒... 使⽤float來表示.

2. 格式化時間(strftime). 這個時間可以根據我們的需要對時間進⾏任意的格式化.

3. 結構化時間(struct_time). 這個時間主要可以把時間進⾏行行分類劃分. 比如. 1970年年01⽉月01⽇日 00點00分00秒 這個時間可以被細分為年, 月, 日.....⼀大堆東西.時間戳我們已經見過了就是time.time(). ⼀般, 我們不會把這樣的時間顯示給客戶,那就需要對時間進行格式化操作.

import time
shijian = time.strftime("%Y-%m-%d %H:%M:%S") 
print(shijian) # 2018-11-14 19:27:12

 

 

日期格式化的標準:

%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   當前時區的名稱
%%   %號本身

 

時間格式的轉換:

時間戳 轉 格式化時間, 需要先轉成結構化時間再轉格式化時間.

格式化時間 轉 時間戳時間,需要先轉成結構化時間再轉時間戳時間.

也就是說都得通過結構化時間來轉化.

#當前結構化時間
import time
print(time.localtime())
#結果: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=19, tm_min=38, tm_sec=36, tm_wday=2, tm_yday=318, tm_isdst=0)

 

 

 比如. 我們的資料庫中存儲了這樣⼀個時間: 1888888888. 如何顯示成xxxx年xx月xx⽇?

import time
# 時間戳:1888888888
shijianchuo=1888888888  #時間戳為1888888888
t_jiegou=time.localtime(shijianchuo) #先為轉結構化時間
print(t_jiegou)  #time.struct_time(tm_year=2029, tm_mon=11, tm_mday=9, tm_hour=11, tm_min=21, tm_sec=28, tm_wday=4, tm_yday=313, tm_isdst=0)

t_geshi=time.strftime('%Y-%m%-%d %H:%M:%S',t_jiegou) #再轉格式化時間 (XXXX年-XX月-XX日 XX時:XX分:XX秒)
print(t_geshi) #打印出格式化後的時間  2029-11-09 11:21:28

格式化時間再轉回時間戳:

#格式化時間轉時間戳
s2='2029-11-09 11:21:28' # 格式化時間其實就是字串格式
t_jiegou=time.strptime(s2,'%Y-%m-%d %H:%M:%S') #把格式化時間轉成結構化時間
t_shijian=time.mktime(t_jiegou) #得到結構化時間,再轉成時間戳
print(t_shijian) # 1888888888.0  一般帶小數.0