日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day22 模块-collections,time,random,pickle,shelve等

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day22 模块-collections,time,random,pickle,shelve等 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、引入模塊的方式:

1. 認識模塊
模塊可以認為是一個py文件. 模塊實際上是我們的py文件運行后的名稱空間
導入模塊:
1. 判斷sys.modules中是否已經導入過該模塊
2. 開辟一個內存
3. 在這個內存中執行該py文件
4. 給這個內存起個名字, 一般用的是py文件的名字。返回給導入方
如果你的py文件是啟動文件, 名字是__main__

程序的入口一般是:
if __name__ == "__main__":
  pass

1. import 模塊

import 模塊名
模塊名.屬性/方法/類

每個模塊都有自己的獨立的名稱空間,每個都有一個global, 互相并不影響
模塊.屬性 = 值. # 不要隨意更改模塊的值

?

2. from xxx import 模塊

from 模塊 import 函數/變量
當作自己的變量或者函數來使用

from xxx import * 導入所有
導入的內容都可以起別名 as

?

二、collections模塊

collections模塊主要封裝了一些關于集合類的相關操作

  • Counter——counter是一個計數器. 主要?用來計數
  • deque 雙向隊列
  • 需了解棧和隊列

    棧:? FILO. 先進后出? -> 砌墻的磚頭, 老師傅做饅頭

    隊列: FIFO. 先進先出? -> 買火?車票排隊, 所有排隊的場景

    隊列: python提供了queue模塊. 使用起來非常?便

    注意. 如果隊列里沒有元素了. 再也就拿不出來元素了. 此時程序會阻塞.

    雙向隊列 collections中的,可以從左側添加,也可從右側添加,刪除同理

      3.namedtuple 命名元組

    給元組內的元素進行命名

    from collections import namedtuple

    # ??定義了一個元組, 如果靈性夠好, 這其實就是創建了了?個類

    nt = namedtuple("point", ["x", "y"])

    p = nt(1, 2)

    print(p)

    print(p.x)

    print(p.y)

    ?

      4.orderdict和defaultdict

    orderdict 顧名思義. 字典的key默認是無序的. 而OrderedDict是有序的

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

    from collections import defaultdict

    dd = defaultdict(list)? # 默認值list

    print(dd['娃哈哈']) # [] 當key不存在的時候. 會自動執?構造方法中傳遞的內容.

    ?

    三、time模塊 ?時間模塊

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

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

    ?

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

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

    3. 結構化時間 time.gmtime() time.localtime()

    ?? strptime() 把格式化時間轉化成結構化時間

    ?? mktime()? 把結構化時間轉化成時間戳

    ?

    s = time.strftime("%Y-%m-%d %H:%M:%S")? 格式化

    print(s)

    ?

    print(time.localtime()) #結構化時間

    結果: time.struct_time(tm_year=2017, tm_mon=05, tm_mday=8, tm_hour=10, tm_min=24, tm_sec=42, tm_wday=0, tm_yday=126, tm_isdst=0)

    ?

    所有的轉化都要通過結構化時間來轉化.

    t = time.localtime(1888888888)? # 結構化時間

    s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化這個時間

    print(s)

    ?

    s = "2020-10-01 12:18:12"

    t = time.strptime(s, "%Y-%m-%d %H:%M:%S")?? # 轉化成結構時間

    print(time.mktime(t))?? # 轉換成時間戳

    ?

    四、random模塊 -隨機

    1 import random 2 print(random.random()) # 0-1?小數 3 print(random.uniform(3, 10)) # 3-10?小數 4 print(random.randint(1, 10)) # 1-10整數 5 [1, 10] print(random.randrange(1, 10, 2)) # 1-10奇數 6 [1,10) print(random.choice([1, '周杰倫', ["蓋倫", "胡辣湯"]])) # 1或者23或者[4,5]) 7 print(random.sample([1, '23', [4, 5]], 2)) # 列列表元素任意2個組合 8 lst = [1, 2, 3, 4, 5, 6, 7, 8] random.shuffle(lst) # 隨機打亂順序 9 print(lst)

    ?

    五、os、sys

    os和sys

    ?

    os.sep 文件路徑分隔符

    sys.path? python查找模塊的路徑

    ?

    六、序列化

    ?

    ??? 1. pickle? 把一個對象轉化成bytes寫入到文件

    ??????? pickle.dumps() 把對象轉換成bytes

    ??????? pickle.loads() 把bytes轉化成對象

    ?

    ??????? pickle.dump() 把對象轉換成bytes. 寫入到文件

    ??????? pickle.load() 把文件中的bytes讀取. 轉化成對象

    ?????? ? 那真的要寫入或者讀取多個內容怎么辦? 很簡單. 裝list里. 然后讀取和寫入都?list

    創建一個Car類 擁有名字,年齡屬性

    lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]

    f = open("cat", mode="wb")

    pickle.dump(lst, f)

    ?

    f = open("cat", mode="rb")

    ll = pickle.load(f)

    for el in ll:???

    el.catchMouse()

    記住?點, pickle序列化的內容是二進制的內容(bytes) 不是給?看的,給機器看的。

    ??? 2. shelve 小型數據庫, redis, mongodb, dict

    ??????? 當成字典來用

    ??????? writeback=True 用來執行修改操作,刪除或修改都用它 不用不改變

    ?

    ??? 3. json 以前用xml? 先在用json

    ??????? json.dumps() 把字典轉換成json字符串

    ??????? json.loads() 把json字符串轉化成字典

    ?

    ??????? json.dump() 把字典轉換成json字符串. 寫入到文件

    ??????? json.load() 把文件中的json字符串讀取. 轉化成字典

    ?

    ??????? default = func()? 把對象轉化成字典. 需要自己寫函數轉換過程

    ??????? object_hook = func() 把字典轉化成對象. 需要自己寫函數轉換過程

    ??????? ensure_ascii = False? 可以處理中文

    ?

    ? 注意. 我們可以向同一個文件中寫?多個json串. 但是讀不?。

    在讀取的時候是?法正常讀取的. 那如何解決呢? 兩套方案. 方案一. 把所有的內容準備好統一 進?行寫入和讀取. 但這樣處理, 如果數據量小還好. 數據量大的話, 就不夠友好了. 方案二. 不用 dump. 改用dumps和loads. 對每??分別進?處理.

    1 import json 2 lst = [{"a": 1}, {"b": 2}, {"c": 3}] 3 # 寫? 4 f = open("test.json", mode="w", encoding="utf-8") 5 for el in lst: 6 s = json.dumps(el, ensure_ascii=True) + "\n" 7 f.write(s) 8 f.close() 9 10 # 讀取 11 f = open("test.json", mode="r", encoding="utf-8") 12 for line in f: 13 dic = json.loads(line.strip()) 14 print(dic) 15 f.close()

    ?

    ?

      4.configparser 處理windows配置文件的? dict

      適用于配置文件的格式與windows ini文件類似

      可以包含一個或多個節(section)每個節 可以有多個參數(鍵=值).

    轉載于:https://www.cnblogs.com/honghong7725/p/9974914.html

    總結

    以上是生活随笔為你收集整理的day22 模块-collections,time,random,pickle,shelve等的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。