Python全棧之文件操作
1. 字典的相關(guān)函數(shù)
字典的相關(guān)函數(shù)
# ### 字典的相關(guān)函數(shù) dic = {} # 增 # 1.普通方法 (推薦) dic["top"] = "369" dic["middle"] = "左手" dic["bottom"] = "杰克愛" print(dic) # 2.fromkeys 使用一組鍵和默認(rèn)值創(chuàng)建字典 tup = ("a","b","c") # fromkeys(盛放鍵的容器,默認(rèn)值) dic = {}.fromkeys(tup,None) print(dic) # 注意點(diǎn) (字典中的三個(gè)鍵默認(rèn)指向的是同一個(gè)列表) dic= {}.fromkeys(tup,[]) print(dic) dic["a"].append(1) print(dic) # 改造 dic = {} dic["top"] = [] dic["middle"] = [] dic["bottom"] = [] dic["top"].append("the boy") print(dic) # 刪 dic = {'top': '369', 'middle': '左手', 'bottom': '杰克愛'} #pop() 通過(guò)鍵去刪除鍵值對(duì) (若沒(méi)有該鍵可設(shè)置默認(rèn)值,預(yù)防報(bào)錯(cuò)) res = dic.pop("middle") print(res) print(dic) # 可以給pop設(shè)置第二個(gè)參數(shù)值,以防止鍵不存在時(shí)報(bào)錯(cuò) res = dic.pop("middle1234","該鍵不存在") print(res) #popitem() 刪除最后一個(gè)鍵值對(duì) dic = {'top': '369', 'middle': '左手', 'bottom': '杰克愛'} res = dic.popitem() print(res) print(dic) #clear() 清空字典 dic.clear() print(dic) # 改 #update() 批量更新(有該鍵就更新,沒(méi)該鍵就添加) # 推薦使用 # 沒(méi)該鍵就添加 dic_new = {"jungle":"karsa","support":"寶藍(lán)"} dic = {'top': '369', 'middle': '左手', 'bottom': '杰克愛'} dic.update(dic_new) print(dic) # 有該鍵就更新 dic_new = {"top":"the bug","support":"xboyww","xiaozhang":"王思聰"} dic.update(dic_new) print(dic) # (了解) dic.update(ww="王文",zl="張磊") print(dic) # 查 # get() 通過(guò)鍵獲取值(若沒(méi)有該鍵可設(shè)置默認(rèn)值,預(yù)防報(bào)錯(cuò)) dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聰"} # res = dic["top123"] # get 在獲取字典鍵時(shí),如果不存在,不會(huì)發(fā)生任何報(bào)錯(cuò),返回的是None res = dic.get("top123") # 可以在獲取不到該鍵時(shí),給與默認(rèn)值提示. res = dic.get("top123","抱歉,該鍵不存在") print(res) # 其他操作 #keys() 將字典的鍵組成新的可迭代對(duì)象 dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聰"} res = dic.keys() print(res , type(res)) #values() 將字典中的值組成新的可迭代對(duì)象 *** res = dic.values() print(res , type(res)) #items() 將字典的鍵值對(duì)湊成一個(gè)個(gè)元組,組成新的可迭代對(duì)象 *** res = dic.items() print(res , type(res)) # for i in res: # print(i) for k,v in res: print(k,v)
2. 集合的操作_函數(shù)
集合的相關(guān)操作 (交差并補(bǔ))
# ### 1.集合的相關(guān)操作 (交差并補(bǔ)) # intersection() 交集 set1 = {"易烊千璽","王一博","劉某PDD","王文"} set2 = {"倪萍","趙忠祥","金龜子大風(fēng)車","小龍人","王文"} res = set1.intersection(set2) print(res) # 簡(jiǎn)寫 & res = set1 & set2 print(res) # difference() 差集 res = set1.difference(set2) print(res) # 簡(jiǎn)寫 - res = set1 - set2 print(res) #union() 并集 res = set1.union(set2) print(res) # 簡(jiǎn)寫 | res = set1 | set2 print(res) #symmetric_difference() 對(duì)稱差集 (補(bǔ)集情況涵蓋在其中) res = set1.symmetric_difference(set2) print(res) # 簡(jiǎn)寫 ^ res = set1 ^ set2 print(res) #issubset() 判斷是否是子集 set1 = {"劉德華","郭富城","張學(xué)友","王文"} set2 = {"王文"} res = set2.issubset(set1) print(res) # 簡(jiǎn)寫 res = set2 < set1 print(res) #issuperset 判斷是否是父集 set1 = {"劉德華","郭富城","張學(xué)友","王文"} set2 = {"王文"} res = set1.issuperset(set2) print(res) # 簡(jiǎn)寫 res = set1 > set2 print(res) #isdisjoint() 檢測(cè)兩集合是否不相交 不相交 True 相交False set1 = {"劉德華","郭富城","張學(xué)友","王文"} set2 = {"王文"} res = set1.isdisjoint(set2) print(res) # ### 2.集合的相關(guān)函數(shù) # 增 #add() 向集合中添加數(shù)據(jù) # 一次加一個(gè) set1 = {"王文"} set1.add("王偉") print(set1) #update() 迭代著增加 # 一次加一堆 set1 = {"王文"} lst = ["a","b","c"] lst = "ppp" # 迭代這添加,無(wú)序,會(huì)自動(dòng)去重 set1.update(lst) print(set1) # 刪 setvar = {'劉某PDD', '小龍人','倪萍', '趙忠祥'} #clear() 清空集合 # setvar.clear() # print(setvar) #pop() 隨機(jī)刪除集合中的一個(gè)數(shù)據(jù) # res = setvar.pop() # print(res) # print(setvar) #discard() 刪除集合中指定的值(不存在的不刪除 推薦使用) *** setvar.discard("劉某PDD111111") # success # setvar.discard("劉某PDD") # print(setvar) #remove() 刪除集合中指定的值(不存在則報(bào)錯(cuò)) (了解) # setvar.remove("劉某PDD111") # error # setvar.remove("劉某PDD") # print(setvar) # ### 3.冰凍集合 (額外了解) """frozenset 單純的只能做交差并補(bǔ)操作,不能做添加或者刪除的操作""" lst = ["王文","宋健","何旭彤"] fz1 = frozenset(lst) print(fz1, type(fz1)) # 不能再冰凍集合中添加或者刪除元素 # fz1.add(1) # fz1.update("abc") # fz1.discard("王文") # 冰凍集合只能做交差并補(bǔ) lst2 = ["王文","王同培","劉一縫"] fz2 = frozenset(lst2) print(fz2, type(fz2)) # 交集 res = fz1 & fz2 print(res) # 遍歷冰凍集合 for i in fz2: print(i)
3. 文件基本操作
# ### 文件操作 """ 語(yǔ)法: fp = open(文件,模式,編碼集) fp => 文件的io對(duì)象 (文件句柄) i => input 輸入 o => outpur 輸出 fp.read() 讀取文件內(nèi)容 fp.write() 寫入文件的內(nèi)容 """ # 1.文件的寫入操作 # (1) 打開文件 fp = open("ceshi1.txt",mode="w",encoding="utf-8")# 打開冰箱門 # (2) 寫入內(nèi)容 fp.write("把大象懟進(jìn)去") # 把大象懟進(jìn)去 # (3) 關(guān)閉文件 fp.close() # 把冰箱門關(guān)上 # 2.文件的讀取操作 # (1) 打開文件 fp = open("ceshi1.txt",mode="r",encoding="utf-8") # (2) 讀取內(nèi)容 res = fp.read() # (3) 關(guān)閉文件 fp.close() print(res) # 3.文件存儲(chǔ)二進(jìn)制字節(jié)流 """ 二進(jìn)制字節(jié)流:`用于傳輸數(shù)據(jù)或者存儲(chǔ)數(shù)據(jù)的一種數(shù)據(jù)格式 b"abc" b開頭的字節(jié)流要求數(shù)據(jù)只能是ascii編碼中的字符,不能是中文 # 將字符串和字節(jié)流(Bytes流)類型進(jìn)行轉(zhuǎn)換 (參數(shù)寫成轉(zhuǎn)化的字符編碼格式) #encode() 編碼 將字符串轉(zhuǎn)化為字節(jié)流(Bytes流) #decode() 解碼 將Bytes流轉(zhuǎn)化為字符串 """ data = b"abc" data = "中文".encode("utf-8") print(data,type(data)) res = data.decode("utf-8") print(res,type(res)) # utf-8下 一個(gè)中文占用3個(gè)字節(jié) data = "中文".encode("utf-8") # 計(jì)算字節(jié)總大小 print(len(data)) # 把中字這個(gè)字節(jié)流進(jìn)行反解恢復(fù)成原來(lái)中的字符 "中" res = b"\xe4\xb8\xad".decode() print(res) # 4.文件存儲(chǔ)二進(jìn)制的字節(jié)流 """如果存儲(chǔ)的是二進(jìn)制字節(jié)流,指定模式wb,不要指定encoding編碼集,否則報(bào)錯(cuò)""" fp = open("ceshi2.txt",mode="wb") strvar = "紅鯉魚綠鯉魚與驢".encode("utf-8") fp.write(strvar) fp.close() # 5.文件讀取二進(jìn)制的字節(jié)流 fp = open("ceshi2.txt",mode="rb") res = fp.read() fp.close() print(res) print(res.decode()) # 6.復(fù)制文件 """所有的圖片,音頻,視頻都需要通過(guò)二進(jìn)制字節(jié)流來(lái)進(jìn)行存儲(chǔ)傳輸.""" # 先把原文件的二進(jìn)制字節(jié)流讀取出來(lái) # 相對(duì)路徑找集合.png 相對(duì)于當(dāng)前3.py這個(gè)文件 # fp = open("集合.png",mode="rb") # 絕對(duì)路徑找集合.png 從最底層一級(jí)一級(jí)往上找 fp = open(r"D:\python32_python\day01\集合.png",mode="rb") res = fp.read() fp.close() # 計(jì)算文件中的字節(jié)個(gè)數(shù) => 文件大小 print(len(res)) # 在把二進(jìn)制字節(jié)流寫入到另外一個(gè)文件中,相當(dāng)于復(fù)制 fp = open("集合2.png",mode="wb") fp.write(res) fp.close()
4. 文件擴(kuò)展模式
文件操作的擴(kuò)展模式
# ### 文件操作的擴(kuò)展模式 """ # (utf-8編碼格式下 默認(rèn)一個(gè)中文三個(gè)字節(jié) 一個(gè)英文或符號(hào) 占用一個(gè)字節(jié)) #read() 功能: 讀取字符的個(gè)數(shù)(里面的參數(shù)代表字符個(gè)數(shù)) 注意:從當(dāng)前光標(biāo)往右邊讀 #seek() 功能: 調(diào)整指針的位置(里面的參數(shù)代表字節(jié)個(gè)數(shù)) seek(0) 把光標(biāo)移動(dòng)到文件的開頭 seek(0,2) 把光標(biāo)移動(dòng)到文件的末尾 #tell() 功能: 當(dāng)前光標(biāo)左側(cè)所有的字節(jié)數(shù)(返回字節(jié)數(shù)) """ # 1.r+ 先讀后寫 """ fp = open("ceshi3.txt",mode="r+",encoding="utf-8") # 先讀 res = fp.read() # 在寫 fp.write("ab") # 在讀 fp.seek(0) # 通過(guò)seek把光標(biāo)移動(dòng)到開頭 print(fp.read()) fp.close() """ # 2.r+ 先寫后讀 """ fp = open("ceshi3.txt",mode="r+",encoding="utf-8") # 移動(dòng)光標(biāo)到最后,否則r模式下,原字符會(huì)被覆蓋 fp.seek(0,2) # 先寫 fp.write("cd") # 把光標(biāo)移動(dòng)到文件的開頭 fp.seek(0) # 在讀 res = fp.read() print(res) fp.close() """ # 3.w+ 可讀可寫,清空重寫(默認(rèn)可以創(chuàng)建新的文件) """ fp = open("ceshi4.txt",mode="w+",encoding="utf-8") fp.write("abc") fp.seek(0) print(fp.read()) fp.close() """ # 4.a+ 可讀可寫,追加寫入 (默認(rèn)可以創(chuàng)建新的文件) """ fp = open("ceshi5.txt",mode="a+",encoding="utf-8") fp.write("def") # 讀內(nèi)容 fp.seek(0) print(fp.read()) fp.close() """ # 5.r+和a+區(qū)別 """ r+模式基于當(dāng)前光標(biāo)所在位置進(jìn)行寫入覆蓋 a+模式會(huì)強(qiáng)制把光標(biāo)放到文件末尾進(jìn)行追加寫入 """ """ # fp = open("ceshi5.txt",mode="r+",encoding="utf-8") fp = open("ceshi5.txt",mode="a+",encoding="utf-8") fp.seek(3) # 從頭數(shù) 3個(gè)字節(jié)的位置 # fp.write("zxc") # 模式會(huì)強(qiáng)制把光標(biāo)放到文件末尾進(jìn)行追加寫入 print(fp.read()) fp.close() """ # 6.seek,tell,read之間的使用 fp = open("ceshi5.txt",mode="r+",encoding="utf-8") fp.seek(4) # tell 當(dāng)前光標(biāo)左邊所有內(nèi)容的字節(jié)數(shù) res = fp.tell() print(res) # 在r+模式下 read(2) 代表讀取2個(gè)字符 在rb模式下 read(2) 代表讀取2個(gè)字節(jié) fp.read(2) # 當(dāng)前光標(biāo)往右所有的字符內(nèi)容 print(fp.tell()) fp.close() # 7.注意點(diǎn) (seek在移動(dòng)時(shí),又可能移動(dòng)到某個(gè)漢字的字節(jié)中間,導(dǎo)致原字節(jié)無(wú)法解析) """ fp = open("ceshi6.txt",mode="r+",encoding="utf-8") fp.seek(3) print(fp.read()) fp.close() # print("你".encode()) # b'\xe4\xbd\xa0' """ # 8.with語(yǔ)法 自動(dòng)實(shí)現(xiàn)文件關(guān)閉操作 # 方法一.讀取二進(jìn)制字節(jié)流 """ with open("集合2.png",mode="rb") as fp: res = fp.read() with open("集合3.png",mode="wb") as fp: fp.write(res) """ # 方法二.繼續(xù)簡(jiǎn)化 with open("集合3.png",mode="rb") as fp1 , open("集合4.png",mode="wb") as fp2 : res = fp1.read() fp2.write(res)
小提示:
字符串、列表、元組用+做一個(gè)拼接 集合無(wú)序去重的 如果這個(gè)數(shù)據(jù)不想讓別人任意修改,就把這些集合給冰凍起來(lái) open一個(gè)類,來(lái)創(chuàng)建一個(gè)對(duì)象 decode(),括號(hào)里面不寫,默認(rèn)是utf-8 w模式,如果文件已經(jīng)存在,也是先清空然后在寫入內(nèi)容 a模式,只能追加數(shù)據(jù),不能讀取數(shù)據(jù) a+可以讀取數(shù)據(jù),讀取數(shù)據(jù)不受影響,seek可以用(會(huì)強(qiáng)制把光標(biāo)放到文件末尾進(jìn)行追加寫入,用seek移動(dòng)光標(biāo)也是沒(méi)有用的) seek移動(dòng)字節(jié)的時(shí)候還是應(yīng)該慎用,因?yàn)橐粋€(gè)中文字符占3個(gè)字節(jié),一個(gè)應(yīng)為字符占用一個(gè)字節(jié),如果一個(gè)中文沒(méi)有截取完整則會(huì)報(bào)錯(cuò) seek(0) seek(0,2) 還有純英文的 純中文的文件使用seek 事實(shí)上,在移動(dòng)我們的內(nèi)容的位置用的不是seek、而是通過(guò)read readline等 文件,后面的的那些函數(shù)來(lái)實(shí)現(xiàn)的 關(guān)閉文件這個(gè)操作必須要寫
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python 字符串操作(string替換、刪除、截取、復(fù)制、連接、比較、查找、包含、大小寫轉(zhuǎn)換、分割等)
這篇文章主要介紹了Python 字符串操作(string替換、刪除、截取、復(fù)制、連接、比較、查找、包含、大小寫轉(zhuǎn)換、分割等),需要的朋友可以參考下2018-03-03關(guān)于Tensorflow和Keras版本對(duì)照及環(huán)境安裝
這篇文章主要介紹了關(guān)于Tensorflow和Keras版本對(duì)照及環(huán)境安裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08通過(guò)Py2exe將自己的python程序打包成.exe/.app的方法
這篇文章主要介紹了通過(guò)Py2exe將自己的python程序打包成.exe/.app的方法,需要的朋友可以參考下2018-05-05K-近鄰算法的python實(shí)現(xiàn)代碼分享
這篇文章主要介紹了K-近鄰算法的python實(shí)現(xiàn)代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例
這篇文章主要介紹了Python操作CouchDB數(shù)據(jù)庫(kù)簡(jiǎn)單示例,本文講解了連接服務(wù)器、創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建文檔并插入到數(shù)據(jù)庫(kù)等操作實(shí)例,需要的朋友可以參考下2015-03-03Tensorflow tf.nn.depthwise_conv2d如何實(shí)現(xiàn)深度卷積的
這篇文章主要介紹了Tensorflow tf.nn.depthwise_conv2d如何實(shí)現(xiàn)深度卷積的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04