Python之檔案操作

來源:互聯網
上載者:User

標籤: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之檔案操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.