Day 16 經常使用模塊

1.collections模塊:額外數據類型模塊

  1:namedtuple(具名元組):有名字的元組,一般用於座標系,撲克牌python

from collections import namedtuple
point = namedtuple('座標',['x','y','z'])  # 第一個參數就是名字,第二個能夠傳可迭代對象,也能夠傳字符串,字符串之間須要空格隔開
  # point = namedtuple('座標','x y z')
p = point(3,6,9)  # 元素個數必須和namedtuple第二個參數一一對應
print(p)  # 座標(x=3, y=6, z=9)
print(p.x)  # 3
print(p.y)  # 6
print(p.z)  # 9
from collections import namedtuple
cards = namedtuple('撲克',['color','num'])
card = cards('','A')
print(card)
print(card.color)
print(card.num)

  2:deque(雙端序列): 能夠從左右兩端插入值和彈出值的隊列shell

from collections import deque
l = deque(['a','b','c'])
l.append(1)  # 默認右側插入 deque(['a', 'b', 'c', 1])
print(l)
l.appendleft(2)  # appendleft方法能夠從左邊插入 deque([2, 'a', 'b', 'c', 1])
print(l)
res = l.pop() # 默認右側彈出  有返回值
print(l,'\t',res)  # deque([2, 'a', 'b', 'c'])      1
res1 = l.popleft() # popleft方法左側彈出有返回值
print(l,'\t',res1)  # deque(['a', 'b', 'c'])      2
l.insert(1,'d')  # 還支持insert 按索引插入
print(l)  # deque(['a', 'd', 'b', 'c'])

  3:OrderedDict(有序字典)json

from collections import OrderedDict
o_d = OrderedDict([('a',1),('b',2),('c',3)])
print(o_d)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# 在python3中效果不顯著.在python2中測試OK.傳入什麼元素對應順序的key就是什麼

  4:defaultdict(帶有默認值字典):相似於dict.fromkeys() 不同的是當統一的值是列表時.defultdict字典value的值都是不一樣的內存地址,不會像fromkeys似的,改變一個全部的都改變bash

l = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
from collections import defaultdict
d = defaultdict(list)  # 建立一個值都會爲空列表的字典
for i in l:
    if i > 66:
        d['k1'].append(i)
    elif i < 66:
        d['k2'].append(i)  # defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99, 90]})
print(d)

  5:Counter(計數器)    返回一個以元素爲key,元素個數爲value的Counter類字典網絡

s = 'abcdeabcdabcaba'  # 判斷s中每一個字符出現的次數
d = {}
for i in s:
    if i not in d:
        d[i] = 1
    else:
        d[i] += 1
print(d)  # {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
from collections import Counter
s = 'abcdeabcdabcaba'
res = Counter(s)
print(res)   # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

2.time模塊:時間模塊3種表現形式..(1)時間戳 (2) 格式化時間  (3) 結構化時間

import time
print(time.time())  # 時間戳,距倫敦時間1970.1.1 00:00:00 過去多少秒
print(time.strftime('%Y-%m-%d %H:%M:%S'))   # 當前時間格式化
print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=18, tm_min=8, tm_sec=53,
                        # tm_wday=3, tm_yday=199, tm_isdst=0)
# 結構化時間
python中時間日期格式化符號:
%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 當前時區的名稱
%% %號自己

  三種時間表現形式轉化:app

 

3.datetime模塊:時間模塊

import datetime
print(datetime.date.today())  # date只是年月日  2019-07-18
print(datetime.datetime.today()) # datetime詳細信息 2019-07-18 18:17:30.981757
res = datetime.datetime.today()
print(res.year)   # 年 2019
print(res.month)  # 月 7
print(res.day)  # 日 18
print(res.weekday()) # 3(從0開始.0表明週一)
print(res.isoweekday()) # 4 (1表明週一)
res = datetime.timedelta(day=7) # datetime.timedelta對象表明兩個時間之間的時間差
時間計算:
日期對象 = 日期對象 +/- timedelta對象
timedelta對象 = 日期對象 +/- 日期對象

4.random模塊:隨機模塊 :

import random
print(random.random())   # 0-1之間的隨機浮點數,不包括0和1
print(random.randint(1,6))  # 生成1-6之間的隨機整數,包括1和6
print(random.randrange(1,10,2))  # 從range(1,10,2)之中抽取一個整數
l = [1, 3, 334, 436, 636, 1231]
print(random.choice(l))  # 隨機抽取列表裏的一個元素
random.shuffle(l)   # 原地打亂列表裏元素的順序 
print(l)
print(random.sample(l,2))  # 隨機抽取列表裏的2個元素,不可能出現兩個同樣的
# 隨機生成N位字母數字組成驗證碼的函數
import random
def func(n):   # n生成多少位的
    code = ''
    for i in range(n):  
        num = str(random.randint(0,9))  # 生成0-9的數字,爲了拼接轉爲字符串
        upper_pha = chr(random.randint(65,90))  # 根據ascii碼錶轉爲對應的大寫字母
        lower_pha = chr(random.randint(97,122))  # 根據ascii碼錶轉爲對應的小寫字母
        code += random.choice([num, upper_pha, lower_pha])  # 字符串拼接,保證字母數字生成的概率同樣
    return code


print(func(6))

5.os模塊:與操做系統交互的模塊

os.makedirs('dirname1/dirname2')    # 可生成多層遞歸目錄
os.removedirs('dirname1')   # 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
os.mkdir('dirname')  #  生成單級目錄;至關於shell中mkdir dirname
os.rmdir('dirname')    # 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname
os.listdir('dirname')    # 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印
os.remove() # 刪除一個文件
os.rename("oldname","newname") # 重命名文件/目錄
os.stat('path/filename')  # 獲取文件/目錄信息

os.system("bash command")  # 運行shell命令,直接顯示
os.popen("bash command).read()  # 運行shell命令,獲取執行結果
os.getcwd() # 獲取當前工做目錄,即當前python腳本工做的目錄路徑
os.chdir("dirname") #  改變當前腳本工做目錄;至關於shell下cd


os.path
os.path.abspath(path)  # 返回path規範化的絕對路徑
os.path.split(path) # 將path分割成目錄和文件名二元組返回
os.path.dirname(path)  # 返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path) # 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path) # 若是path存在,返回True;若是path不存在,返回False
os.path.isabs(path) # 若是path是絕對路徑,返回True
os.path.isfile(path) # 若是path是一個存在的文件,返回True。不然返回False
os.path.isdir(path)  # 若是path是一個存在的目錄,則返回True。不然返回False
os.path.join(path1[, path2[, ...]])  # 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略
os.path.getatime(path)   # 返回path所指向的文件或者目錄的最後訪問時間
os.path.getmtime(path)  #  返回path所指向的文件或者目錄的最後修改時間
os.path.getsize(path)  # 返回path的大小

 

6.sys模塊: python解釋器模塊

sys.exit(n)        退出程序,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version        獲取Python解釋程序的版本信息
sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform       返回操做系統平臺名稱

sys.argv: 命令行參數List,第一個元素是程序自己路徑,能夠設置權限dom

# 在命令行使用 針對管理員或測試
if len(sys.argv) <= 1:
    print('請輸入用戶名和密碼')
else:
    username = sys.argv[1]
    password = sys.argv[2]
    if username == 'name' and password == 'pwd':
        print('歡迎使用')      
    else:
        print('用戶不存在 沒法執行當前文件')

7.json模塊,pickle模塊:序列化模塊:因爲寫入文件的數據必須是字符串,網絡傳輸的數據是二進制因此必須用到序列化和反序列化

  序列化就是將其餘數據類型轉成字符串的過程函數

  反序列化就是將字符串轉成其餘數據類型的過程測試

json 與 pickle的區別:spa

  json:全部語言都支持json格式, 單json支持的數據類型少 有字符串,列表字典.整形,布爾值,元組 其中元組會轉化爲列表,json格式字符串必須是雙引號  

  dumps: 序列化

import json
d = {'name':18}
res = json.dumps(d)
print(res,type(res))  # {"name": 18} <class 'str'>

  loads:反序列化

import json
d = {'name':18}
res = json.dumps(d)
print(res,type(res))  # {"name": 18} <class 'str'>
res1 = json.loads(res)
print(res1,type(res1))  # {'name': 18} <class 'dict'>

  dump: 序列化  與 dumps結果一致.但針對的是文件句柄,用於寫入文件

  load:反序列化  與 load結果一致.但針對的是文件句柄 用於讀文件

 

  pickle :方法與json中方法一致只支持python 他對python的左右數據類型都支持   用pickle模塊操做文件時文件打開模式必須是b模式

8.subprosess模塊:子進程模塊

1.用戶經過網絡鏈接上了你的這臺電腦
2.用戶輸入相應的命令 基於網絡發送給了你這臺電腦上某個程序
3.獲取用戶命令 裏面subprocess執行該用戶命令
4.將執行結果再基於網絡發送給用戶
這樣就實現 用戶遠程操做你這臺電腦的操做

# 示範
while True:
    cmd = input('cmd>>>:').strip()
    import subprocess
    obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    # print(obj)
    print('正確命令返回的結果stdout',obj.stdout.read().decode('gbk'))
    print('錯誤命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))
相關文章
相關標籤/搜索