常用模塊-01

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

本節主要內容: 1.模塊的簡單認識 2.collections模塊 3.time時間模塊 4.random模塊 5.os模塊 6.sys模塊 一.模塊的簡單認識 模塊:就是我們把裝有特定功能的代碼進行歸類的結果. 引入模塊的方式 1.import 模塊 2.from xxx import 模塊 二. ...


本節主要內容:

1.模塊的簡單認識

2.collections模塊

3.time時間模塊

4.random模塊

5.os模塊

6.sys模塊

 

 一.模塊的簡單認識

模塊:就是我們把裝有特定功能的代碼進行歸類的結果.

引入模塊的方式

1.import 模塊

2.from xxx import 模塊

 

二.collections模塊

collections模塊主要封裝了一些關於集合類的相關操作.例如:Iterable,Iterator等等.

1.Counter

counter是一個計數器,主要用來計數

計算一個字元串中每個字元出現的次數:

from collections import Counter

s = "life is a chocolate"
ss = Counter(s)
print(ss)
# 結果:
# Counter({' ': 3, 'l': 2, 'i': 2, 'e': 2, 'a': 2, 'c': 2, 'o': 2, 'f': 1, 's': 1, 'h': 1, 't': 1})

 

 

2.deque雙向隊列

在說雙向隊列之前我們先瞭解兩種數據結構:

1.棧:FILO.它的特點是先進後出

2.隊列:FIFO.先進先出

由於python中沒有給出棧(stack)模塊,我們可以粗略寫一個棧的模塊:

class StackFullError(Exception):
    pass


class StackEmptyError(Exception):
    pass

#
class Stack:
    def __init__(self,size):
        self.size = size
        self.index = 0
        self.lst = []

    def push(self,el):
        if self.index == self.size:
            raise StackFullError("the stack is full")
        self.lst.insert(self.index,el)
        self.index += 1

    def pop(self):
        if self.index == 0:
            raise StackEmptyError
        self.index -= 1
        c =self.lst.pop(self.index)
        return c


st = Stack(3)
st.push("早上好")
st.push("中午好")
st.push("晚上好")

print(st.pop())
print(st.pop())
print(st.pop())

 

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

import queue

q = queue.Queue()
q.put("劉德華")
q.put("張學友")
q.put("郭富城")

print(q)
print(q.get())
print(q.get())
print(q.get())
# print(q.get()) #隊列中如果沒有元素了,繼續獲取的話,會阻塞

 

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

雙向隊列deque,此隊列是collections中的.

from collections import deque

q = deque()
q.append("Mandy")
q.append("Cassie")  # 右側添加
q.appendleft("Luis")    # 左側天劍
q.append("Hans")

print(q.pop())  # 右側刪除
print(q.popleft())  # 左側刪除
print(q.pop())
print(q.popleft())

 

 

3.namedtuple 命名元組

命名元組: 給元組內的元素進行命名.

from collections import namedtuple

# 定義元組,其實相當於創建了一個類
ppp = namedtuple("hah",["x","y","c"])
p = ppp(1,2,3)
print(p)
# p.c = 15  # 報錯,因為ppp始終是個元組,元組不能進行增刪改操作
print(p.y)

 

 

4.orderdict 和 defaultdict

orderdict: 字典的key預設是無序的,而OrderDict是有序的

dic = {'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'} 
print(dic)
 
from collections import OrderedDict 
od = OrderedDict({'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'}) 
print(od)

 

由於python3.5後的版本列印字典都預設按輸入時順序列印,所以看不出效果.但是內部儲存還是無序的,因為字典的key是按hash列表儲存的.

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

from collections import defaultdict

dc = defaultdict(list)  # 括弧裡面的是一個可被調用的對象
print(dc["周星馳"])
# 結果: []

 

三.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秒 這個時間可以被細分為年,月,日,星期,等等...

 

我們一般展示給客戶看的時間都是進行格式化後的時間,而不是時間戳.

s = time.strftime("%Y-%m-%d %H:%M:%S")    # 必須記住
print(s)

 

# 從時間戳 -> 格式化時間
t = time.localtime(1542513992) # 時區   gmtime() 格林尼治時間.
print(t)
str_time = time.strftime("%Y-%m-%d %H:%M:%S", t)
print(str_time)

結果: 2018-11-18 12:06:32

 

日期格式化的標準:

%y 兩位數的年份表示(00-99)

%Y 四位數的年份表示(0000-9999)

%m 月份(01-12

%d 月內中的一天(0-31)

%H 24小時制小時數(0-23)

%I 12小時制小時數(01-12)

%M 分鐘數(0-59)

%S 秒 (00-59)

%a 本地簡化星期名稱

%A本地完整星期名稱

%b 本地簡化的月份名稱

%B 本地完整的月份名稱

%c 本地相應的日期表示和時間表示

%j 年內的一天(001-366)

%p 本地A.M.或P.M.的等價符

%U 一年中的星期數(00-53)

%w 星期(0-6),星期天為星期的開始

%x 本地相應的日期表示

%X 本地相應的時間表示

%Z 當前時區的名稱

%% %號本身

 

結構化時間:

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) 

 

 

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

 

# 資料庫里存了一個時間戳 1888888888
# 從時間戳 -> 格式化時間
t = time.localtime(1542513992) # 時區   gmtime() 格林尼治時間.
print(t)
str_time = time.strftime("%Y-%m-%d %H:%M:%S", t)
print(str_time)

用戶輸入一個時間. 變成時間戳
格式化時間 -> 時間戳
2018-11-18 12:06:32
s = "2018-11-18 12:06:32"
t = time.strptime(s, "%Y-%m-%d %H:%M:%S") #  string parse time
print(t)
# 結構化時間 -> 時間戳
ss = time.mktime(t)
print(ss)
print(time.strftime("%Y年%m月%d日"))

# 中文
import locale
locale.setlocale(locale.LC_CTYPE, "chinese")

 

 

 

 

計算時間差:

第一種演算法:

begin = "2018-11-14 16:30:00"
end = "2018-11-14 18:00:00"
# 用時間戳計算出時間差(秒)
begin_struct_time = time.strptime(begin, "%Y-%m-%d %H:%M:%S")
end_stract_time = time.strptime(end, "%Y-%m-%d %H:%M:%S")

begin_second = time.mktime(begin_struct_time)
end_second = time.mktime(end_stract_time)

# 秒級的時間差   180000
diff_time_sec = abs(begin_second - end_second)

# 轉換成分鐘
diff_min = int(diff_time_sec//60)
print(diff_min)

diff_hour = diff_min//60  # 1
diff_min_1 = diff_min % 60 # 30

print("時間差是 %s小時%s分鐘" % (diff_hour, diff_min_1))

 

第二種演算法:

begin = "2019-11-14 16:30:00"
end = "2018-11-14 18:00:00"
# 用時間戳計算出時間差(秒)
begin_struct_time = time.strptime(begin, "%Y-%m-%d %H:%M:%S")
end_stract_time = time.strptime(end, "%Y-%m-%d %H:%M:%S")

begin_second = time.mktime(begin_struct_time)
end_second = time.mktime(end_stract_time)

# 秒級的時間差  180000
diff_time_sec = abs(begin_second - end_second)

# 轉化成結構化時間
t = time.gmtime(diff_time_sec) # 最好用格林尼治時間。 否則有時差
print(t)

print("時間差是%s年%s月 %s天 %s小時%s分鐘" % (t.tm_year-1970, t.tm_mon-1, t.tm_mday-1,t.tm_hour, t.tm_min ))

 

關於time模塊還需要去看的內容: datetime(時間), calender(日曆)

四.random模塊

所有關於隨機相關的內容都在random模塊中.

import random

print(random.randint(1,2))  # [start, end]
print(random.random()) # (0,1)之間的小數
print(random.uniform(3,10)) # (3, 10 )的隨機小數

n = random.randrange(1, 10, 3) # [1, 10) 從奇數中獲取到隨機數
while n != 10:
    n = random.randrange(1, 10, 3)

for i in range(1, 10, 3):
    print(i)

print(random.choice([1, '周傑倫', ["蓋倫", "胡辣湯"]])) # 列表中的任意一個元素
print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2個組合

lst = ["周傑倫", "昆凌", "馬化騰", "馬麗", "沈騰", "秋雅"]
random.shuffle(lst) # 隨機打亂順序
print(lst)

 

 

五.os模塊

所有和操作系統相關的內容都在os模塊

import os
os.makedirs('dirname1/dirname5') # 創建文件夾目錄結構
os.removedirs('dirname1/dirname5')  # 刪除文件夾, 如果文件夾內沒有東西。 就可以刪除。 否則報錯

os.mkdir('dirname/哈哈')  # mkdir如果父級目錄不存在。 報錯
os.rmdir('dirname') # 刪除文件夾

print(os.listdir('../')) # 獲取到文件夾內的所有內容. 遞歸

print(os.stat('dirname')) # linux

os.system("dir") # 直接執行命令行程式
s = os.popen("dir").read()
print(s)

print(os.getcwd() ) # 當前程式所在的文件夾

print(os.path.abspath("../day020 繼承") ) # 獲取絕對路徑
print(os.path.split("D:\python_workspace\day020 繼承")) # 拆分路徑 ('D:\\python_workspace', 'day020 繼承')
print(os.path.dirname("D:\python_workspace\day020 繼承")) # D:\python_workspace
print(os.path.basename("D:\python_workspace\day020 繼承")) # day020 繼承

print(os.path.exists("dirname")) # 判斷文件是否存在
print(os.path.isabs("D:\python_workspace\day020 繼承")) # 是否是絕對路徑

print(os.path.isfile("01 今日主要內容")) # 是否是文件
print(os.path.isdir("dirname")) # 是否是文件夾

print(os.path.getsize("01 今日主要內容") ) # 文件大小

print("胡辣湯", "傳盛", "big", sep="small")

print("c:"+os.sep+"胡辣湯") # \\/  文件路徑的分隔符

print(os.name) # nt

 

os.stat()屬性解讀:

stat 結構: 
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)是創建時間(詳細信息參見平臺的文檔)。

 

六.sys模塊

所有和python解釋器相關的都在sys模塊:

sys.argv           命令行參數List,第一個元素是程式本身路徑 
sys.exit(n)        退出程式,正常退出時exit(0),錯誤退出sys.exit(1) sys.version        獲取Python解釋程式的版本信息 
sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值 
sys.platform       返回操作系統平臺名稱

 


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

-Advertisement-
Play Games
更多相關文章
  • 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,日期欄位希 ...
  • 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 ...
  • ·字典(dict) 筆記: 字典(映射)成對出現,由鍵及其相應的值組成,鍵-值對稱作項(item),字典是python中唯一內置映射類型。字典中的鍵必須是獨一無二的。 在python 2中進行拷貝需要調用copy模塊;而在python 3 中可以直接使用淺拷貝copy(),當使用深拷貝deepcop ...
  • 反射reflection 可以大大提高程式的靈活性,使得interface{}有更大的發揮餘地 反射可以使用TypeOf和ValueOf函數從介面中獲取目標對象信息 反射會將匿名欄位作為獨立欄位(匿名欄位的本質) 想要利用反射修改對象狀態,前提是interface.data是settable,即po ...
  • 建立composer.json 執行 建立server.php 建立client.php 執行 結果 ...
  • 不定期更新使用到的比較好用的快捷鍵 全局修改 ctrl + alt + shift + J 局部修改 用法:alt + 滑鼠左鍵(拖動要修改的代碼) 註:游標停留在要修改內容範圍內,滑鼠左鍵按住再按alt,然後才拖動要修改的代碼,順序不能錯 查看源碼 ctrl + 滑鼠左鍵 刪除一行代碼 ctrl ...
  • 一、collections collections模塊主要封裝了一些關於集合類的相關操作。比如,iterable,Iteratort等等,除此之外,collections還提供了一些除基本數據類型以外的數據集合類型。Counter,deque,OrderDict,defaultdict以及named ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...