網絡編程(part2)--文件讀寫之打開/讀取/寫入

鄙人學習筆記



文件讀寫

對文件實現讀寫的基本操作步驟爲:打開文件,讀寫文件,關閉文件。
本篇BLOG和本系列的下一篇BLOG會對文件讀寫的步驟進行一一舉例說明。

打開文件

file_object = open(file_name, access_mode='r', buffering=-1)
功能:打開一個文件,返回一個文件對象。
參數:file_name————文件名;
     access_mode————打開文件的方式,如果不寫默認爲‘r’ 
          文件模式                        操作
              r                    以讀方式打開.文件必須存在
              w                    以寫方式打開文件.若文件不存在,則創建,若存在,則清空原有內容 
              a                    以追加模式打開.若文件不存在,則創建,若存在,也保留文件內容,並在文件末尾繼續寫 

              r+                   以讀寫模式打開 文件必須存在
              w+                   以讀寫模式打開文件不存在則創建,存在清空原有內容
              a+                   以讀寫模式打開 追加模式
              rb                   以二進制讀模式打開 同r
              wb                   以二進制寫模式打開 同w
              ab                   以二進制追加模式打開 同a
              rb+                  以二進制讀寫模式打開 同r+
              wb+                  以二進制讀寫模式打開 同w+
              ab+                  以二進制讀寫模式打開 同a+
     buffering————參數0表示無緩衝,1表示有行緩衝,如果是大於1表示直接指明緩衝區大小。如果不寫或爲負數則表示使用系統默認提供的緩衝機制。在py中,通常情況下這個參數我們都不寫,直接用系統默認的就OK了.
返回值:成功返回文件流對象。失敗得到IOError。

我們用open()打開一個文件,會返回給變量fd一個文件對象。打開一個文件之後,我們就可以對這個文件對象進行讀寫操作了。

備註:buffering表示,開闢的緩衝區類型。緩衝,表示系統自動的在內存中爲每一個正在使用的文件開闢一個緩衝區,從內存向磁盤輸出數據必須先送到內存緩衝區,裝滿緩衝區在一起送到磁盤中去。這樣做,是爲了減少與磁盤的交互次數,從而提高效率、保護了磁盤。舉個例子:我們在用word寫論文時,寫了好幾頁,但沒保存(假設word也沒有幫我們自動保存),這些沒保存的論文,就在緩衝區內。如果這時突然斷電(假設我們此時用的是臺式電腦)那麼寫了那麼久的論文就會丟失。

圖示:

舉個例子1(以讀方式打開)

我們在主py文件test02.py所在的文件夾內創建一個txt文件,裏面寫一些數據,如下圖所示:

我們在主py文件中讀取文件:

結果:

備註:別忘了最後一定要關閉文件!

舉個例子2(以寫方式打開)

(1)若文件不存在

首先,我們看一下我們的文件列表:

在python中,我們打開一個不存在的文件None.txt:

我們再看一下,文件列表:

新的文件創建出來了!

(2)文件存在, 且文件有內容

查看一下我們的note.txt文件,結果:

清空了!

讀取文件

read

read([size])

用來直接讀取字節到字符串中,最多讀取給定數目個字節。如果沒有給定size參數(默認值爲-1)或者size值爲負,文件將被讀取直至末尾。文件過大時候,不建議直接讀取到文件末尾,因爲會消耗大量內存,讀取時間也會更長,建議在non-blocking模式下使用。

舉個例子1

首先看一下我們的數據文件:

(1) 不設置size參數,直接讀取到文件末尾
我們讀取一下:

輸出結果:

(2)一次讀取16個字節

①我們按照一次16個字節讀取文件:

輸出結果:

②我們按照一次1024個字節讀取文件:

輸出結果:

若一次想要讀取的字節數,大於文件的字節數,則文件有多少字節,就讀取多少字節。

(3)一次讀取8個字節,但仍然想讀完全部文件

循環讀取:

結果:

readline

readline([size])

讀取打開文件的一行(讀取下個行結束符之前的所有字節)。沒有給定size參數,則讀取整行整行,包括行結束符,並作爲字符串返回。和 read() 相同,它也有一個可選的 size 參數,默認爲 -1,代表讀至行結束符。如果提供了該參數,如果行的字節數超過size,則會返回不完整的行。

舉個例子2(繼續用例子1的note.txt文件)

(1)不設置size參數,讀取一行

我們讀取一下:

結果:

備註:當我們沒有指定size時,readline遇到換行符纔會結束。

(1)設置size參數

①我們按照一次4個字節讀取行:

結果:

我們再讀取一次:

結果:

由結果可知,第二次讀取時,readline會沿着第一次讀取的末尾,繼續讀取這一行剩下內容。

readlines

readlines([sizeint])

該方法並不像其它兩個輸入方法一樣返回一個字符串。它會讀取所有(剩餘的)行然後把它們作爲一個字符串列表返回。它的可選參數sizhint代表返回的最大字節大小,當sizeint不足該行的字節數時,也會得到這一行的內容。我們在使用時,一般不設置參數。

舉個例子3

讀取:

結果:

由結果可知,每一行,讀取成了列表中的一個元素。

for循環

for line in fd:
     print(line)

文件對象本身也是一個可迭代對象,在for循環中可以迭代文件的每一行

舉個例子4

讀取:

結果:

寫入文件

write

write(string)

功能與 read() 和 readline() 相反。它把含有文本數據或二進制數據塊的字符串寫入到文件中去。

舉個例子1

我們向空文件None.txt寫入數據:

結果:

再寫一行:

結果:

備註:如果想換行就要人爲添加換行符\n。

writelines

writelines(str_list)

和 readlines() 相反,writelines()方法是針對列表的操作,它接受一個字符串列表作爲參數,將它們寫入文件。行結束符並不會被自動加入,所以如果需要的話,你必須在調用writelines()前給每行結尾加上行結束符。

舉個例子2

我們None.txt寫入數據:

結果:

舉個例子3(以追加模式寫入)

原來的note.txt文件:

寫入:

結果:

備註:在追加模式a下,不能read()操作,因爲它沒有讀取得權限。如果讀取,則會報錯。
如下所示:

結果:

報錯!

若既想讀又想寫,則可以在各個參數值後添加【+】加號.如下圖所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章