第二十一天- 基本模塊

来源:https://www.cnblogs.com/xi1419/archive/2018/11/14/9960821.html
-Advertisement-
Play Games

1 from collections import Counter 2 3 s = "狗咬我一口,難道我還要去咬狗?" 4 # dic = {} 5 # for el in s: 6 # dic[el] = dic.setdefault(el,0) + 1 7 # print(dic) 8 9 c ...


 

# 模塊:模塊就是我們把裝有特定功能的代碼進⾏歸類的結果
# 目前寫的所有的py⽂件都是模塊

# 引入方式:
# 1.import 模塊
# 2.from xxx import 模塊
# 目前都是用的python內置模塊 後面高級框架時需要額外安裝第三方模塊


# collections模塊:
# 1.Counter 計數器 計數
 1 from collections import Counter
 2 
 3 s = "狗咬我一口,難道我還要去咬狗?"
 4 # dic = {}
 5 # for el in s:
 6 #     dic[el] = dic.setdefault(el,0) + 1
 7 # print(dic)
 8 
 9 c = Counter(s)  # 獲取到的結果可像字典一樣使用
10 # print("__iter__"in dir(c))
11 print(c)
12 # for k in c:
13 #     print(k, c[k])
View Code

 

# 2.雙向隊列
# 數據結構: 棧 先進後出 隊列 先進先出
 1 # python中提供了列隊 沒有棧 自己寫一個棧
 2 class StackFullError(Exception):
 3     pass
 4 class StackEmptyError(Exception):
 5     pass
 6 
 7 class Stack:
 8     def __init__(self, size):
 9         self.index = 0 #  棧頂指針
10         self.lst = []
11         self.size = size
12 
13     # 給棧添加元素
14     def push(self, item):
15         if self.index == self.size:
16             # 棧已經滿了. 不能再裝東西了
17             raise StackFullError('the stack is full')
18         self.lst.insert(self.index, item) # 對於空列表. 需要insert插入內容
19         # self.lst[self.index] = item # 把元素放到棧里
20         self.index += 1     # 棧頂指針向上移動
21 
22     # 從棧中獲取數據
23     def pop(self):
24         if self.index == 0:
25             raise StackEmptyError("the stack is empty")
26         self.index -=1 # 指針向下移動
27         item = self.lst.pop(self.index) # 獲取元素. 刪除.
28         return item
29 
30 # s = Stack(5)
31 # s.push("饅頭1號")
32 # s.push("饅頭2號")
33 # s.push("饅頭3號")
34 # s.push("饅頭4號")
35 # s.push("饅頭5號")
36 #
37 # print(s.pop())
38 # print(s.pop())
39 # print(s.pop())
40 # print(s.pop())
41 # print(s.pop())
42 #
43 #
44 # lst = []
45 # lst.append("哈哈1")
46 # lst.append("哈哈2")
47 # lst.append("哈哈3")
48 # lst.append("哈哈4")
49 #
50 # print(lst.pop())
51 # print(lst.pop())
52 # print(lst.pop())
53 # print(lst.pop())
View Code
# 隊列  先進先出
# python提供了queue模塊. 直接用
 1 import queue
 2 
 3 q = queue.Queue()
 4 q.put("林俊傑")
 5 q.put("王力巨集")
 6 q.put("周傑倫")
 7 q.put("陳道明")
 8 
 9 # print(q.get())
10 # print(q.get())
11 # print(q.get())
12 # print(q.get())
13 #
14 # # print(q.get()) # 若隊伍里沒有元素了, 繼續獲取 會阻塞
15 # input() # 也會阻塞 輸入等待 enter就能結束
16 # print("沒有了。。。")
View Code
# deque 註意,此列隊是collection中的
 1 from collections import deque
 2 
 3 q = deque()
 4 
 5 q.append("劉亦菲")
 6 q.append("江疏影")
 7 q.appendleft("楊冪")
 8 q.appendleft("胡歌")
 9 
10 # print(q.pop())  # 從右邊拿
11 # print(q.pop())
12 # print(q.popleft())  # 從左邊拿
13 # print(q.popleft())
14 
15 # print(q.pop())  # 若隊伍里沒有元素了 會報錯
View Code

 

# 3.namedtuple  命名元祖
 1 from collections import namedtuple
 2 
 3 point = namedtuple("",["x","y","z"])  # 等同一個只有屬性的類
 4 # class point:
 5 #     def __init__(self,x,y,z):
 6 #         self.x = x
 7 #         self.y = y
 8 #         self.z = z
 9 
10 p = point(5,6,7)
11 print(p.x)
12 print(p.y)
13 print(p.z)
14 
15 print(p)
16 p.x = 21  # 報錯 不可改 終歸是一個元祖
View Code

 

# 4.defaultdict
# 可以給字典設置預設值. 當key不存在時. 直接獲取預設值:
 1 from collections import   defaultdict
 2 
 3 lst = [11,22,33,44,55,66]
 4 d = defaultdict(list)
 5 for el in lst:
 6     if el <22:
 7         d['key1'].append(el)  # key1預設是不存在的. 但是可以拿key1. 一個空列表.
 8     else:
 9         d["key2"].append(el)
10 
11 print(d)
View Code

 

# 5.orderdict
# orderdict 字典預設無序 OrderedDict是有序的
1 dic = {'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'}
2 print(dic)
3 from collections import OrderedDict
4 od = OrderedDict({'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'})
5 print(od)
View Code

 

 

# 時間模塊
# 獲取當前系統時間, 時間戳
# print(time.time()) # 1542166230.6139991, 給機器看的, 以1970-01-01 00:00:00為起點
# 格式化時間
1 import time
2 # 獲取當前時間
3 s = time.strftime("%Y-%m-%d %H:%M:%S")
4 print(s)  # 2018-11-14 11:47:29
# 應用-計時器
1 time.sleep(5) # 睡 到點起床  類似的 wait() -> notify()
2 
3 while 1:
4     s = time.strftime("%Y-%m-%d %H:%M:%S")
5     print(s)
6     time.sleep(1)

 

# 時間戳 -> 格式化時間
1 import time
2 t = time.localtime(31999999999)  # localtime 本地時間   gmtime() 格林尼治時間  時差
3 print(t)
4 str_time = time.strftime("%Y-%m-%d %H:%M:%S",t)
5 print(str_time)
# 格式化時間 -> 時間戳
1 s = "2984-01-15 16:53:19"
2 # 先結構化時間
3 t = time.strptime(s,"%Y-%m-%d %H:%M:%S")  # 註意:要轉化的格式是什麼 結構化時就是什麼
4 print(t)
5 ss = time.mktime(t)
6 print(ss)
# 註:結構化時間實際上就是一個命名元祖 如:
1 t = time.localtime()
2 # print(t)  # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=20, tm_min=46, tm_sec=45, tm_wday=2, tm_yday=318, tm_isdst=0)
3 # 實際在程式里是(2018, 11, 14, 20, 46, 45, 2, 318, 0)

 

# 時間差計算
 1 import time
 2 
 3 time_now = time.strptime("2018-11-14 15:07:08","%Y-%m-%d %H:%M:%S")
 4 time_old = time.strptime("2017-12-25 18:07:22","%Y-%m-%d %H:%M:%S")
 5 diff_cha = time.mktime(time_now) - time.mktime(time_old)  # 先轉換成時間戳
 6 # 方案一
 7 re = time.gmtime(diff_cha)  # 結構化時間
 8 re1 = time.strftime("%Y-%m-%d %H:%M:%S",re) # 格式化時間
 9 # 註意預設時間1970-01-01,要減去。
10 print("相差%s年%s月%s天%s小時%s分鐘%s秒"%(re.tm_year - 1970,re.tm_mon - 1,re.tm_mday - 1,re.tm_hour,re.tm_min,re.tm_sec))
11 
12 # 方案二
13 diff_min = int(diff_cha//60)  # 轉化成分
14 # print(diff_min)
15 diff_hour = int(diff_min // 60)  # 轉換成小時
16 # print(diff_hour)
17 diff_day = int(diff_hour // 24)  # 轉換成天
18 # print(diff_day)
19 
20 diff_sec = int(diff_cha % 60)
21 # print(diff_sec)  # 剩下的秒  46
22 
23 diff_min1 = diff_min % 60
24 # print(diff_min1)  # 剩下的分  59
25 
26 diff_hour1 = diff_hour % 24
27 # print(diff_hour1)  # 剩下的小時  20
28 
29 print("時間差是%s天%s小時%s分%s秒"%(diff_day,diff_hour1,diff_min1,diff_sec))
View Code

 

 

# random模塊
 1 import random
 2 
 3 print(random.random())  # (0,1)之間的隨機小數
 4 print(random.randint(1,10))  # [1,10] 閉區間 隨機整數
 5 print(random.uniform(3,10))  # (3,10)之間的隨機小數
 6 
 7 print(random.randrange(1,10,2))  # [1,10) 切片 隨機每兩個取一個
 8 
 9 print(random.choice([1,'李榮浩','周傑倫',['胡辣湯','疙瘩湯']])) # 隨機取一個
10 print(random.sample([1,'23',[4,5]],2))  # 列表元素任意兩個組合
11 
12 lst = [1,2,3,4,5,6,7,8,9]
13 random.shuffle(lst)  # 隨機打亂順序
14 print(lst)
View Code

 

 

# os模塊
# 和系統操作相關的內容
 1 import os
 2 
 3 os.makedirs('dirname1/dirname2')  # 創建文件夾目錄結構
 4 os.removedirs('哈啊哈') # 刪除文件夾,如果文件夾內沒有東西,可以刪除,否則報錯
 5 
 6 os.mkdir('dirname/哈哈')  # 生成單級目錄 若父級目錄不存在會報錯
 7 os.rmdir('dirname') # 刪除單級文件夾 若不是空的 報錯  inError 145] 目錄不是空的。: 'dirname'
 8 
 9 print(os.listdir('../'))  # 遞歸 列出指定⽬錄下的所有⽂件和⼦⽬錄,包括隱藏⽂件,並以列表⽅式列印
10 
11 os.remove('xxx')  # 刪除一個文件
12 os.rename('oldname','newname')  # 重命名文件/目錄
13 
14 
15 os.stat('dirname')  # 獲取文件信息 linux常用
16 # stat() 屬性解讀
17 # stat 結構:
18 # st_mode: inode 保護模式
19 # st_ino: inode 節點號。
20 # st_dev: inode 駐留的設備。
21 # st_nlink: inode 的鏈接數。
22 # st_uid: 所有者的⽤戶ID。
23 # st_gid: 所有者的組ID。
24 # st_size: 普通⽂件以位元組為單位的⼤⼩;包含等待某些特殊⽂件的數據。
25 # st_atime: 上次訪問的時間。
26 # st_mtime: 最後⼀次修改的時間。
27 # st_ctime: 由操作系統報告的"ctime"。在某些系統上(如Unix)是最新的元數據更改的時間,在
28 # 其它系統上(如Windows)是創建時間。
View Code
1 import os
2 
3 # os.system("dir")  # 模擬命令行 直接執行命令
4 # s = os.popen('dir').read()  # 運⾏shell命令,獲取執⾏結果
5 # print(s)
6 
7 # print(os.getcwd())  # 獲取當前程式的目錄
8 # os.chdir()  # 更改程式工作目錄 相當於 linux  cd
View Code
# path相關
 1 # path相關
 2 import os
 3 print(os.path.abspath('dirname'))  # 獲取絕對路徑
 4 print(os.path.split('E:\Python_workspace\day021- 基本模塊1\dirname'))  # 拆分路徑
 5 print(os.path.dirname('E:\Python_workspace\day021- 基本模塊1\dirname'))  # 返回上面拆分的第一個元素
 6 print(os.path.basename('E:\Python_workspace\day021- 基本模塊1\dirname'))  # 即返回上面拆分第二個元素
 7 
 8 print(os.path.exists('E:\Python_workspace\day021- 基本模塊1\dirname'))  # 看文件是否存在 存在True 不存在 False
 9 print(os.path.isabs('xxx'))  # 判斷是否是絕對路徑
10 
11 print(os.path.isfile('xxx'))  # 判斷是否文件
12 print(os.path.isdir('xxx'))  # 判斷是否文件夾
13 
14 print(os.path.join('path1[, path2[, ...]]'))  # 拼接路徑
15 print(os.path.getatime('xxx'))  # 文件或目錄最後訪問時間
16 print(os.path.getmtime('xxx'))  # 文件或目錄最後修改時間
17 print(os.path.getsize('xxx'))  # 返回 xxx 的大小
View Code
# 特殊屬性
1 print(os.sep)  # 文件分隔符 \\  /  windows \\  linux / (重要)
2 print('c:'+os.sep+'王尼瑪')  # 這樣寫多平臺可用
3 #
4 # os.linesep  # 輸出當前平臺使⽤的⾏終⽌符,win下為"\r\n",Linux下為"\n"
5 # os.pathsep  # 輸出⽤於分割⽂件路徑的字元串 win下為; ,Linux下為:  (陪環境變數時用到)
6 
7 print(os.name)  # 輸出字元串指示當前使⽤平臺。win->'nt'; Linux->'posix' 判斷用戶使用系統
View Code

 

 

# sys模塊
# 所有和python解釋器相關的都在sys模塊
 1 import sys
 2 
 3 print(sys.argv)  # 命令⾏參數List,第⼀個元素是程式本身路徑(不常用)
 4 
 5 # sys.exit(0)  # 退出 類似 exit()  0正常退出 非0不正常
 6 print(sys.version)  # 獲取Python解釋器版本詳細信息
 7 print(sys.platform)  # 返回操作系統平臺名稱
 8 
 9 
10 print(sys.path)  # 搜索模塊的路徑
11 # sys.path.append("E:/")  # 若master不在sys的搜索路徑里可 .append('路徑') 添加到sys 一樣可調用
12 import master  # master文件放在同目錄 是sys.path搜索的第一個元素 所有可調用
13 master.chi()  # 胖虎很能吃
View Code

 




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 歡迎到我的簡書查看我的文集 前言: 是圖形用戶界面,在 中,圖形用戶界面我們用 表示,而 的完整英文為: (圖形用戶介面), 所謂圖形用戶界面就是以圖形的方式來顯示你電腦的操作界面, 我們電腦中操作的界面就是 我們 中常說的圖形用戶界面, 這樣的操作簡單明瞭. 的英文為 , 是命令行用戶介面, ...
  • 51.HashMap的實現原理 HashMap的主幹是一個Entry數組。 Entry是HashMap的基本組成單元, 每一個Entry包含一個key-value鍵值對。 HashMap基於hashing原理, 我們通過put()和get()方法儲存和獲取對象。 當我們將鍵值對傳遞給put()方法時 ...
  • 包導入格式 導入模塊時除了使用模塊名進行導入,還可以使用目錄名進行導入。例如,在sys.path路徑下,有一個dir1/dir2/mod.py模塊,那麼在任意位置處都可以使用下麵這種方式導入這個模塊。 一個實際一點的示例,設置PYTHONPATH環境變數為 ,然後在此目錄下創建以上目錄和mod.py ...
  • 在講述fileinput模塊之前,首先說一下python內置的文件API—open()函數以及與其相關的函數。 我這裡主要講講其中四個比較重要和常用的方法,更多的方法,可以參考:菜鳥教程http://www.runoob.com/python/file-methods.html (1)file = ...
  • Python基礎知識(3):基本數據類型之數字 一、基本數據類型 數字Number、字元串String、列表List、元組Tuple、集合Set、字典Dictionary 二、數字 Python3支持int、float、bool、complex,其中只有一種整數類型int。 (1)內置函數type( ...
  • 前言:前面寫了後天管理系統工程搭建以及框架的整合測試,今天寫一下商品列表的分頁查詢 1 需求分析 前臺使用easyui的分頁工具,後臺則使用mybatis分頁插件pagehelper 如上圖所示,打開後臺首頁,點擊查詢商品,按下F12,可以看到easyui的分頁界面會向controller發送兩個數 ...
  • 1、安裝JDK1.7及以上 2、下載解壓sdk並且配置環境變數: ANDROID_HOME:...\adt-bundle-windows-x86_64-20140702\sdk PATH:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools; dos檢 ...
  • 在做項目的時候,發現後臺把Date類型的屬性以json字元串的形式返回,前臺拿不到轉換後的日期格式,始終響應回去的都是long類型時間戳。 查閱資料之後找到解決方法(在springmvc的xml配置文件下): 修改之後運行結果: 還有就是前端提交日期的json,格式為2018-07-26,日期欄位希 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...