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})
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
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對象 = 日期對象 +/- 日期對象
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))
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的大小
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('用戶不存在 沒法執行當前文件')
序列化就是將其餘數據類型轉成字符串的過程函數
反序列化就是將字符串轉成其餘數據類型的過程測試
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模式
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'))