標籤:with open temp 自動 code .com 自動化測試 標識符 內容 作檔案
一、檔案讀寫入模式
python檔案的讀寫很簡單,僅僅是一個open函數。
開啟檔案方式有:
open(絕對路徑/‘檔案名稱’,讀寫入模式,encoding=‘utf-8‘),open這種方式開啟檔案,操作後,要關閉檔案;
with open(‘檔案名稱‘,讀寫入模式,encoding=‘utf-8‘)as f.with這種方式開啟檔案,自動會關閉檔案。
檔案操作的三步驟:
1、開啟檔案擷取檔案控制代碼,控制代碼就理解是這個檔案;
2、通過檔案控制代碼操作檔案
3、關閉檔案
注意:理解控制代碼的概念
在stdio.h中聲明typedef struct{ short level; //緩衝區滿與空的程度 unsigned flags; //檔案狀態標誌 char fd; //檔案描述符 unsigned char hold; //無緩衝區,不讀字元 short bsize; //buffer大小 unsigned char *curp; //當前指向 unsigned istemp; //臨時檔案知指示 short token; //有效性檢測} FILE;
為了管理開啟的檔案,系統為所有檔案建立了一個開啟檔案資訊的結構體數組,檔案控制代碼就是每個檔案的唯一識別碼,是檔案在記憶體中的儲存位置。控制代碼顧名思義,開啟後要關閉才能再次開啟。所以更新檔案後,一定要先關閉檔案,再次讀取讀到更新後的檔案內容。
檔案讀模數式:
fr=open(‘a.txt‘,‘r‘)print(fr.read())fr.write(‘qiuqiqu,123456QQ‘)print(fr.read())運行結果:liuyihan,123456YHTraceback (most recent call last): File "E:/自動化測試/LYH_python/Day4作業/file.py", line 3, in <module> fr.write(‘qiuqiqu,123456QQ‘)io.UnsupportedOperation: not writable
r:唯讀模式,開啟不存在的檔案時,報錯;讀完檔案後,檔案指標在末尾
w:唯讀模式,會清空原來的檔案內容;開啟不存在的檔案時,直接幫你建立一個檔案;
a:追加寫入模式,在原檔案內容末尾追加新內容;開啟不存在的檔案時,直接幫你建立一個檔案。
r+:可讀,可寫,可追加模式,開啟不存在的檔案時,幫你建立一個檔案。
a.txt檔案內容:、liuyihan,123456NNqiuuqiu,123456QQnuanuan,123455NNfr=open(‘a.txt‘,‘r+‘)fr.write(‘niuhanyang,123456NN‘)print(fr.read())運行結果:qiuqiu,123456QQnuanuan,123455NN
以上程式,你有看懂嗎?檔案寫時,檔案指標在首行,所以liuyihan,123456YH 被修改為niuhanyang,123456NN,這時檔案指標在第二行。讀取檔案時,read()將第二行和第二行以後的內容讀出來。所以顯示結果如所示。
w+:寫讀模式,寫時會把原來檔案內容清空,可讀取已寫入的檔案內
a+:追加讀寫內容,不存在的檔案會自動建立,存在則只追加內容。
file.txt檔案內容:liuyihan,123456YHqiuqiu,123456QQfr=open(‘a.txt‘,‘a+‘)fr.write(‘niuhanyang,123456NN\n‘)fr.seek(0)print(fr.read())運行結果:liuyihan,123456YHqiuqiu,123456QQniuhanyang,123456NN
上面程式,若不加fr.seek(0),讀取結果為空白,因為追加寫,檔案指標在末尾,讀取時讀不到東西,seek()方法就是把檔案指標指向那個位置。0代表首行。
二、檔案操作方法
f = open(‘file.txt‘,‘a+‘,encoding=‘utf-8‘)f.read()#讀取檔案所有內容,返回字串類型f.readline()#讀取檔案第一行內容,返回一個Listf.readlines()#一行一行讀,擷取檔案所有內容,返回一個List,檔案的每行內容作為List的每個元素f.write()#將字串寫入檔案,只能是字串類型f.writelines()#將一個序列字串列表寫入檔案,需要換行時自己手動添加\nf.seek(0)#檔案指標指向哪個位置f.tell()#擷取當前檔案的指標指向f.flush()#寫入資料後,立即把資料從記憶體寫到磁碟中f.truncate()#清空檔案內容
import os
os.remove(‘file.txt‘)#刪除檔案
os.rename(‘file.txt‘,‘new_file.txt‘)#檔案重新命名
注意:用上方read()和readlines()方法操作檔案時,當檔案很大時,會將檔案所有內容讀到記憶體中,很容易引起記憶體撐爆。高效的操作就是,讀一行操作一行,然後讀過的內容從記憶體中釋放。如以下代碼:
三、修改檔案
修改檔案有兩種方式:
第一種:讀取檔案所有內容,將檔案內容修改後,清空檔案所有原內容,再將修改後的檔案內容重新寫入;
注意:指明檔案絕對路徑時,路徑中若含有\t、\n、\s等逸出字元,在路徑前加r,意思是檔案路徑中的\t、\n等不是逸出字元。
第二種:將修改後的內容寫入一個新檔案。
四、處理json字串
S=‘‘‘{ "error_code": 0, "stu_info": [ { "id": 309, "name": "小白", "sex": "女", "age": 26, "addr": "河南省濟源市北海大道32號", "grade": "天蠍座", "phone": "18512572946", "gold": 100 }, { "id": 310, "name": "小黑", "sex": "男", "age": 26, "addr": "河南省濟源市北海大道32號", "grade": "天蠍座", "phone": "18516572946", "gold": 120 } ]}‘‘‘mport jsonres = json.loads(S) #json串(字串),轉成字典print(res)#列印出字典stus={‘xiaojun‘:‘123456‘,‘xiaohei‘:‘7891‘,‘tanailing‘:‘11111‘ ,‘海龍‘:‘111‘}#定義一個字典res2=json.dumps(stus,indent=8,ensure_ascii=False)#將字典轉換成json字串,Ensure_ascii=False是防止中文報錯print(res2)#列印出json字串with open(‘stus.json‘,‘w‘,encoding=‘utf-8‘) as f:#將字典轉換成json字串,然後再寫入檔案stus.json中 f.write(res2)
以上程式,最終建立了一個stus.json檔案,裡面內容為json類型
4.1如何從檔案中讀取json資料
第一種方式:用loads(),將檔案的所有內容讀出來(json字串類型),轉換成字典,再列印出字典,從而擷取到檔案內容
第二種方法:用load(),直接操作檔案,將json字串轉換成字典,再列印出字典,從而擷取檔案內容。
4.2 如何將json資料寫入檔案
第一種方法:用dumps(),將字典轉換成json字串類型,再寫入檔案
第二種方法:用dump(),直接操作檔案,傳入字典和檔案,將字典直接轉換成json字串類型,寫入檔案。
、
注意:從上述程式,不難發現,很好記憶,帶s的函數是處理json字串的,不帶s的可直接處理檔案。
Python之檔案操作