- 學(xué)習(xí)測(cè)試開(kāi)發(fā)的Day101,真棒!
- 學(xué)習(xí)時(shí)間為1H40M
- 第九次全天課(下午視頻二2H40M-3H27M_END)

如果有問(wèn)題的話,保存的時(shí)候選擇此模式,并把前面多余的幾個(gè)字節(jié)去掉即可!
序列化

程序中我們經(jīng)常用到變量,但是當(dāng)程序一關(guān),這個(gè)變量就沒(méi)有了,我們想把這個(gè)變量的狀態(tài)記下來(lái),變量除了有值還會(huì)有類型,如果下次我們還是想用這個(gè)變量怎么辦?只能手寫(xiě),但是如果我們想保存上一次變量的值就沒(méi)有辦法了,因?yàn)椴恢缹?xiě)了多少,所以要把上一個(gè)變量本身的值都保存下來(lái),這就叫做序列化。
把你的變量保存到文件中,下一次取出來(lái)直接用,這個(gè)稱之為序列化,就是把變量、值和類型,保存在文件里面的過(guò)程稱之為序列化
而從文件中把變量的值都取出來(lái),再存到變量中,這個(gè)叫做反序列化
假設(shè)我是客戶端,你是服務(wù)器端,我給你發(fā)了一個(gè)序列化的變量,在你那反序列化之后我的變量你就可以用了,這就是遠(yuǎn)程通訊的時(shí)候可以使用的一種方式,這就是序列化的價(jià)值,可以在不同機(jī)器上,或者把你的變量保存起來(lái),而且把變量保存在文件中
代碼:
# -*- coding:utf-8 -*- #
import pickle as p
shoplistfile='D:\\0grory\\day9\\shoplist.data'
shoplist=['apple','mango','carrot']
f=open(shoplistfile,'wb')
p.dump(shoplist,f)
f.close()
del shoplist
f=open(shoplistfile,'rb')
storedlist=p.load(f)
print('從文件讀取的列表對(duì)象:',storedlist)
輸出:
PS D:\0grory\day9> python .\seria.py
從文件讀取的列表對(duì)象: ['apple', 'mango', 'carrot']
PS D:\0grory\day9>
序列化可以同時(shí)存多個(gè)變量
先被寫(xiě)入的變量先被讀取
多個(gè)變量的序列化

代碼:
# -*- coding:utf-8 -*- #
import pickle as p
shoplistfile='D:\\0grory\\day9\\shoplist.data'
shoplist1=['apple','mango','carrot']
shoplist2=['apple1','mango1','carrot1']
f=open(shoplistfile,'wb')
p.dump(shoplist1,f)
p.dump(shoplist2,f)
f.close()
del shoplist1
del shoplist2
f=open(shoplistfile,'rb')
storedlist=p.load(f)
storedlist2=p.load(f)
print('從文件讀取的列表對(duì)象:',storedlist)
print('從文件讀取的列表對(duì)象:',storedlist2)
輸出:
PS D:\0grory\day9> python .\seria.py
從文件讀取的列表對(duì)象: ['apple', 'mango', 'carrot']
從文件讀取的列表對(duì)象: ['apple1', 'mango1', 'carrot1']
PS D:\0grory\day9>
不想用數(shù)據(jù)庫(kù)存,又不想把數(shù)據(jù)全部用文本的形式存到數(shù)據(jù)庫(kù)里,這時(shí)候就可以用序列化的形式來(lái)存了
可以把知識(shí)都做成相應(yīng)的作品
目錄操作
Python os 模塊提供了一個(gè)統(tǒng)一的操作系統(tǒng)接口函數(shù), 這些接口函數(shù)通常是平
臺(tái)指定的,os 模塊能在不同操作系統(tǒng)平臺(tái)(如 nt 或 posix)中的特定函數(shù)間
自動(dòng)切換,從而能實(shí)現(xiàn)跨平臺(tái)操作。
python中對(duì)文件、文件夾(文件操作函數(shù))的操作需要涉及到os模塊和shutil
模塊。
引入該模塊,import os, shutil
getcwd()、chdir(path)

獲取當(dāng)前在哪個(gè)目錄下
>>> import os
>>> os.getcwd()
'D:\\0grory\\day9'
>>>
更改目錄
>>> os.chdir("D:\\0grory\\day9")
>>> os.getcwd()
'D:\\0grory\\day9'
>>>
改為到上一級(jí)目錄
法1:
>>> os.chdir("..")
>>> os.getcwd()
'D:\\0grory'
>>>
法2:
>>> os.chdir(os.pardir)
>>> os.getcwd()
'D:\\0grory'
>>>
目錄操作很重要,自動(dòng)化部署都會(huì)遇到
curdir、pardir

>>> os.name
'nt'
>>> os.mkdir("D:\\0grory\\day9\\test")#只能建一級(jí)目錄
>>> os.makedirs("D:\\0grory\\day9\\test\\1\\2\\3")# 建多級(jí)目錄
>>>
小練習(xí):建一個(gè)10級(jí)深度目錄,目錄名隨意,每個(gè)目錄下面一個(gè)文件和目錄名一致,文件內(nèi)容是文件名+“Hello”
自己的代碼
import os
str1="D:\\0grory\\day9"
str2=""
for i in range(0,10):
str2+="\\"+str(i)
os.makedirs(str1+str2)
fp=open(str1+str2+"\\"+str(i)+".txt",'w+')
fp.write(str(i)+".txt"+"Hello")
執(zhí)行:
PS D:\0grory\day9> python .\tenml.py
PS D:\0grory\day9>
結(jié)果

老師的:
import os
os.chdir("D:\\0grory\\day9\\test")
for i in range(1,11):
os.mkdir("gloryroad"+str(i))
os.chdir("gloryroad"+str(i))#改變當(dāng)前腳本工作目錄;相當(dāng)于shell下的cd命令。
fp=open("gloryroad"+str(i)+".txt","w")
fp.write("gloryroad"+str(i)+".txt"+"光榮之路")
fp.close()
執(zhí)行:
PS D:\0grory\day9> python .\t10ml.py
結(jié)果:
