一.今日主要內容
1.nametuple:(命名元組,本質仍是元組)
命名元組=>相似建立了一個類
結構化時間實際上是個命名元組
2.os
主要是針對操做系統的
通常用來操做文件系統
os.makedirs() 能夠一次性建立多級目錄
os.rmdir() 刪除一個文件夾
os.path.dirname() 獲取文件夾
3.sys(後邊學習包和模塊的基礎)
主要針對的是咱們的python解釋器
sys.path(重點中的重點)
4.序列化
把一個對象拍散 叫序列化
把拍散的內容整合回對象,反序列化
(1)pickle(重點//把大象拍散)
把一個對象進行序列化操做
1.dumps() 把對象序列化成字節
2.loads() 把字節反序列化成對象
3.dump() 把對象序列化寫入文件
4.load() 把文件中的內容反序列化成對象
(2)json(重點中的重點)就是一種數據格式,不是一門技術.(在python中,就是一種模塊)
#json和pickle操做是同樣,可是數據的格式化是不一樣的
json你能夠認爲是python中的字典,有一點點的不同
區別:
python:True,False,None
json:true,false,null
1.dumps() 把對象序列化成json
2.loads() 把json反序列化成對象
3.dump() 把對象序列化寫入文件
4.load() 把文件中的內容反序列化成對象
二.今日內容大綱
1.命名元組
2.os模塊
3.sys模塊
4.pickle模塊
5.json模塊
三.今日內容詳解
1.命名元組(namedtuple)
(1)
from collections import namedtuple #類 p=namedtuple('Point',['x','y']) #對象 '''#等價於下面 # class Point: # def __init__(self,x,y): # self.x=x # self.y=y ''' p1=p(10,20) print(p1) print(p1.x) print(p1.y) #在這裏咱們把Point看做是類,p看做是對象 ''' 結果: Point(x=10, y=20) 10 20 '''
(2)
from collections import namedtuple car=namedtuple('Car',['chepai','color','pailiang']) c=car('京C-10000','綠色','1.8T') print(c) # 結果:Car(chepai='京C-10000', color='綠色', pailiang='1.8T') import time print(time.localtime()) #結果:time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=20, # tm_min=16, tm_sec=11, tm_wday=3, tm_yday=361, tm_isdst=0) #結構化時間實際上是個命名元組
2.os模塊
(1)
import os #能夠一次性建立多級目錄 # 直接幫助建立 //必需要記住.很經常使用 os.makedirs('baby/baobao/donggua/黃曉明') #能夠一次性建立多級目錄 # 下面代碼行在運行時必須註釋掉上邊的那行代碼 os.makedirs('baby/安哥拉/特斯拉/黃曉明') #能夠一次性建立多級目錄
(2)node
import os os.mkdir(r'donggua\xiaobai') #上層文件夾必須存在,建立一個文件 #注意這個地方必定要添加上r
(3)python
import os os.removedirs('donggua') #目錄不是空,不能刪除 os.removedirs('baby/安哥拉/特斯拉/黃曉明') #安哥拉/特斯拉/黃曉明所有刪除了 #能夠幫咱們刪除當前這個目錄級中的全部空文件夾
(4)linux
#建立能夠多建立,可是刪除不能夠多刪除, import os os.rmdir('baby/baobao/donggua/黃曉明') #一次只能刪除一個'黃曉明'文件
(5)#用法介紹1shell
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 #
#用法介紹2json
stat()屬性解讀(linux系統用的比較多,用到的時候再說) 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)是建立時間(詳細信息參見平臺的文檔)。
(6)
#查看當前文件夾內全部的內容 import os os.system('dir') #運⾏shell命令,直接顯示 #注意,上面這條命令,會顯示一些看不懂的字符
(7)超級重點知識(popen)bash
import os print(os.popen('dir')) #結果:<os._wrap_close object at 0x00000195BF1475C0> print(os.popen('dir').read()) #運⾏shell命令,獲取執行結果 #顯示正常的當前目錄 #後期學習到運維的時候會用到,服務器之間的連接等等,而後敲命令 ''' #上邊第二條語句執行的結果: 驅動器 F 中的卷是 新加捲 卷的序列號是 DC0A-B9CD F:\Python_workspace_S18\week5\day23 內置模塊2 的目錄 2018-12-27 20:49 <DIR> . 2018-12-27 20:49 <DIR> .. 2018-12-27 20:18 3,263 01 今日內容大綱 2018-12-27 20:05 3,859 02 做業講解.py 2018-12-27 20:17 863 03 命名元組.py 2018-12-27 20:49 3,296 04 os模塊.py 2018-12-27 12:43 783 05 pickle模塊.py 2018-12-27 12:53 77 06 json模塊.py 2018-12-27 20:33 <DIR> baby 2018-12-27 20:29 <DIR> donggua 2018-12-27 17:42 931 test.py 2018-12-27 19:57 90 userinfo 2018-12-27 15:23 1,145 今日做業.py 2018-12-27 12:53 296 汪峯.xml 10 個文件 14,603 字節 4 個目錄 151,124,221,952 可用字節 '''
(8)服務器
#getcwd() 獲取當前工做目錄 import os print(os.getcwd()) #結果:F:\Python_workspace_S18\week5\day23 內置模塊2 #也就是當前工做文件夾的絕對路徑
(9)app
import os os.chdir('baby') #chdir()表明更換當前的工做目錄 print(os.getcwd()) #F:\Python_workspace_S18\week5\day23 內置模塊2\baby #目錄發生了改變 f=open('userinfo',mode='r',encoding='utf-8') #這樣就不能正常工做了 for line in f: print(line) f=open('../userinfo',mode='r',encoding='utf-8') #回到上一層目錄,這樣就能夠正常工做了 for line in f: print(line)
(10)運維
#用法介紹3學習
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的大⼩小 特殊屬性: os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" os.linesep 輸出當前平臺使用的行終止符,win下爲"\r\n",Linux下爲"\n" os.pathsep 輸出用於分割文件路徑的字符串 win下爲;,Linux下爲: os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
(11)
#os.path 和路徑相關的內容 import os print(os.path.abspath('userinfo')) #把相對路徑改寫成絕對路徑
(12)
# 將path分割成目錄和文件名,2元素以元組返回 import os print(os.path.abspath('userinfo')) #把相對路徑改爲絕對路徑 #結果:F:\Python_workspace_S18\week5\day23 內置模塊2\userinfo print(os.path.split(r'F:\Python_workspace_S18\week5\day23 內置模塊2\baby')) #結果:('F:\\Python_workspace_S18\\week5\\day23 內置模塊2', 'baby') print(os.path.dirname(r'F:\Python_workspace_S18\week5\day23 內置模塊2\baby')) #結果:F:\Python_workspace_S18\week5\day23 內置模塊2 print(os.path.basename(r'F:\Python_workspace_S18\week5\day23 內置模塊2\baby')) #結果: baby
整合結果: F:\Python_workspace_S18\week5\day23 內置模塊2\userinfo ('F:\\Python_workspace_S18\\week5\\day23 內置模塊2', 'baby') F:\Python_workspace_S18\week5\day23 內置模塊2 baby
(13)
#exists 判斷是否存在 (返回結果是False&true) import os print(os.path.exists(r'F:\Python_workspace_S18\week5\day23 內置模塊2\baby')) #結果:True
3.sys模塊
(1)
# \r 回車 \n 換行
#sys模塊 #由於變量上邊寫的是win32 import sys print(sys.platform) #結果:win32
(2)超級重點的知識:
#模塊部分的重點,也就是path的問題python #返回模塊的搜索路徑 import sys print(sys.path) #找模塊.必需要記住,模塊的搜索路徑 sys.path.append('F:\Python_workspace_S18\week5\day21 繼承') print(sys.path) #在文件路徑列表中添加目錄 #跨文件,找路徑能夠考慮這個東西 import master master.chi()
master.py
def chi(): print('大神很能吃')
#結果: ['F:\\Python_workspace_S18\\week5\\day23 內置模塊2', 'F:\\Python_workspace_S18', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'G:\\PyCharm 2018.2.3\\helpers\\pycharm_matplotlib_backend'] ['F:\\Python_workspace_S18\\week5\\day23 內置模塊2', 'F:\\Python_workspace_S18', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'G:\\PyCharm 2018.2.3\\helpers\\pycharm_matplotlib_backend', 'F:\\Python_workspace_S18\\week5\\day21 繼承'] 大神很能吃
(3)
sys.path.clear() #這句話必定不能寫
4.pickle模塊
(1)
import pickle class Elephant: def __init__(self,name,weight,height): self.name=name self.weight=weight self.height=height def tiaoxi(self): print(f"{self.name}大象特別喜歡調戲人") e=Elephant('寶寶','1.85T','175') e.tiaoxi() #序列化 bs=pickle.dumps(e) #把對象進行序列化 print(bs) Bs=b'\x80\x03c__main__\nElephant\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x06\x00\x00\x00\xe5\xae\x9d\xe5\xae\x9dq\x04X\x06\x00\x00\x00weightq\x05X\x04\x00\x00\x00185Tq\x06X\x06\x00\x00\x00heightq\x07X\x03\x00\x00\x00175q\x08ub.' #反序列化 dx=pickle.loads(bs) #反序列化,獲得的是大象 dx.tiaoxi() dx=pickle.loads(Bs) dx.tiaoxi() #xml解析比較麻煩
(2)
import pickle class Elephant: def __init__(self,name,weight,height): self.name=name self.weight=weight self.height=height def tiaoxi(self): print(f"{self.name}大象特別喜歡調戲人") # (1-1)#第一步:寫 # e1=Elephant('寶寶','1.85T','175') # e2=Elephant('寶貝','1.20T','120') # f=open('大象',mode='wb') # #下面也是序列化 # pickle.dump(e1,f) #123 沒有s(dumps)的這個方法是把對象打散寫入到文件 # pickle.dump(e2,f) #123 沒有s(dumps)的這個方法是把對象打散寫入到文件 #寫入文件的內容,咱們是看不懂的//序列化的內容不是給人看的 #前一個參數是對象,後一個參數是文件句柄 #注意,若是兩個都想寫入的話,須要都要打開 (1-2)#第二步:讀 # f=open('大象',mode='rb') # obj1=pickle.load(f) # obj2=pickle.load(f) # obj1.tiaoxi() # obj2.tiaoxi() (1-3) #存的時候沒有問題,讀的時候就有問題了 #排除讀完文件的異常 # f=open('大象',mode='rb') # while 1: # try: # obj=pickle.load(f) # obj.tiaoxi() # except Exception: # break (2-1) #將對象放入列表中, e1=Elephant('寶寶','1.85T','175') e2=Elephant('寶貝','1.20T','120') lst=[e1,e2] #寫 pickle.dump(lst,open('大象',mode='wb')) #讀 lst=pickle.load(open('大象',mode='rb')) for dx in lst: dx.tiaoxi()
5.json模塊
(1)
import json dic = {"baby":None, "hxm":False, "syy":"小白楊"} s = json.dumps(dic) # json處理中文的問題 print(s) #結果:{"baby": null, "hxm": false, "syy": "\u5c0f\u767d\u6768"}
(2)
import json dic = {"baby":None, "hxm":False, "syy":"小白楊"} s = json.dumps(dic, ensure_ascii=False) # json處理中文的問題 # s = json.dumps(dic, ensure_ascii=False).encode('utf-8') #在這裏咱們轉換成字節就樂意傳輸數據了 print(s) #成功的解決了中文問題 print(type(s)) #注意這個轉換的是字符串 #結果:{"baby": null, "hxm": false, "syy": "小白楊"} #<class 'str'>
(3)
import json d = json.loads('{"baby": null, "hxm": false, "syy": "史楊楊"}') print(d) #結果;{'baby': None, 'hxm': False, 'syy': '史楊楊'} print(type(d)) #結果:<class 'dict'> print(d['baby'])#結果:None #由於這是json裏的數據
(4)
#一個json文件通常放一個對象 #若是非要放多個,經過列表的形式,存放數據,注意這個數據中間必須有逗號進行間隔 import json f=open('baby.json',mode='w',encoding='utf-8') # json.dump({"baby":None, "hxm":False, "syy":"史楊楊"}, f) #寫入文件的結果:{"baby": null, "hxm": false, "syy": "\u53f2\u6768\u6768"} json.dump({"baby":None, "hxm":False, "syy":"史楊楊"}, f, ensure_ascii=False) # #寫入文件的結果:{"baby": null, "hxm": false, "syy": "史楊楊"}
(5)#讀出結果
import json f = open("baby.json", mode="r", encoding="utf-8") obj = json.load(f) print(obj) 結果:[{'baby': None, 'hxm': False, 'syy': '史楊楊'}, {'baby': None, 'hxm': False, 'syy': '史楊楊'}]