常用模块-01
本節主要內容:
1. 模塊的簡單認識
2. collections模塊
3. time時間模塊
4. random模塊
5. os模塊
6. sys模塊
一. 模塊的簡單認識
?什么是模塊. 模塊就是我們把裝有特定功能的代碼進行歸類的結果. 從代碼編寫的單位 來看我們的程序, 從小到大的順序:
一條代碼 < 語句塊 < 代碼塊(函數, 類) < 模塊. 我們目前寫 的所有的py文件都是模塊.
引入模塊的?方式:????????????
1. import 模塊???????????
2. from xxx import 模塊???????
關于這兩種寫法. 我們后?面還要繼續介紹. 在之前的學習中, 我們已經用過了一些基本的 模塊了了. 比如, random, os, sys, collections等等. 那我們目前?用到的所有模塊都是python內 置的模塊.不需要額外安裝. 在后?面學習?高級框架的內容的時候. 可能需要我們?行安裝一些 第三方提供的模塊.
二. collections模塊
collections模塊主要封裝了一些關于集合類的相關操作. 比如, 我們學過的Iterable, Iterator等等.? 除了了這些以外, collections還提供了一些除了基本數據類型以外的數據集合類 型. Counter, deque, OrderDict, defaultdict以及namedtuple
?1. Counter???????????
counter是一個計數器. 主要用來計數???????
計算一個字符串中每個字符出現的次數:
from collections import Counter s = "I am sylar, I have a dream, freedom...." qq = counter(s) print(s)2. deque 雙向隊列
(重點)說雙向隊列列之前我們需要了了解兩種數據結構. 1. 棧, 2. 隊列 ? ? ? ? ??
1. 棧:? FILO. 先進后出? -> 砌墻的磚頭, 老師傅做饅頭???????????
2. 隊列: FIFO. 先進先出? -> 買火車票排隊, 所有排隊的場景
# class StackFullError(Exception): # pass # class StackEmptyError(Exception): # pass # # class Stack: # def __init__(self, size): # self.index = 0 # 棧頂指針 # self.lst = [] # self.size = size # # # 給棧添加元素 # def push(self, item): # if self.index == self.size: # # 棧已經滿了. 不能再裝東西了 # raise StackFullError('the stack is full') # self.lst.insert(self.index, item) # 對于空列表. 需要insert插入內容 # # self.lst[self.index] = item # 把元素放到棧里 # self.index += 1 # 棧頂指針向上移動 # # # 從棧中獲取數據 # def pop(self): # if self.index == 0: # raise StackEmptyError("the stack is empty") # self.index -=1 # 指針向下移動 # item = self.lst.pop(self.index) # 獲取元素. 刪除. # return item # s = Stack(5) # s.push("饅頭1號") # s.push("饅頭2號") # s.push("饅頭3號") # s.push("饅頭4號") # s.push("饅頭5號") # # print(s.pop()) # print(s.pop()) # print(s.pop()) # print(s.pop()) # print(s.pop())?隊列
# 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("拿完了")?雙向隊列
# 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 命名元組
# from collections import namedtuple # # point = namedtuple("Point", ["x", "y", 'z']) # 這個就相當于寫了一個類 # # class point: # # def __init__(self, x, y): # # self.x = x # # self.y = y # # p = point(5, 18, 88) # print(p.x) # print(p.y) # # p.x = 19 # 終歸是一個元組 # print(p)4. orderdict和defaultdict
# dic = {'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'} # print(dic) # 最底層一定是無序的. 最底層是hash # # from collections import OrderedDict # # 按照我們存儲的順序保存數據 # od = OrderedDict({ 'b':'薯條','a':'娃哈哈', 'c':'胡辣湯'}) # print(od) # lst= [11,22,33,44,55,66,77,88,99] # d = defaultdict(list) # for el in lst: # if el < 66: # d["key1"].append(el) # key1默認是不存在的. 但是可以拿key1. 一個空列表. # else: # d["key2"].append(el) # print(d)?三. time 時間模塊(重點)
? 時間模塊是我們要熟記的. 到后面寫程序的時候經常能用到. 比如, 如何計算時間差. 如何按照客戶的要求展示時間. 等等.
import time
print(time.time())? # 1538927647.483177? 系統時間
日期格式化的標準:
%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 當前時區的名稱 %% %號本身
從時間戳 -> 格式化時間
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")
?
# 時間差? 1小時30分
# 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 )) 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.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 import sys
# sys.exit(1) # 正常退出 # print(sys.version)
# print(sys.platform) # 平臺名稱
print(sys.path) #? 搜索模塊的路徑
sys.path.append("e:/")
import master
master.chi() 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)是創建時間(詳細信息參?見平臺的?文檔)。
?
轉載于:https://www.cnblogs.com/DanielYang11/p/9959962.html
總結
- 上一篇: html不支持ie7,解决IE6/IE7
- 下一篇: QXDM操作应用