网络编程(part2)--文件读写之打开/读取/写入
鄙人學習筆記
文章目錄
- 文件讀寫
- 打開文件
- 舉個例子1(以讀方式打開)
- 舉個例子2(以寫方式打開)
- 讀取文件
- read
- 舉個例子1
- readline
- 舉個例子2(繼續用例子1的note.txt文件)
- readlines
- 舉個例子3
- for循環
- 舉個例子4
- 寫入文件
- write
- 舉個例子1
- writelines
- 舉個例子2
- 舉個例子3(以追加模式寫入)
文件讀寫
對文件實現讀寫的基本操作步驟為:打開文件,讀寫文件,關閉文件。
本篇BLOG和本系列的下一篇BLOG會對文件讀寫的步驟進行一一舉例說明。
打開文件
file_object = open(file_name, access_mode='r', buffering=-1) 功能:打開一個文件,返回一個文件對象。 參數:file_name————文件名;access_mode————打開文件的方式,如果不寫默認為‘r’ 文件模式 操作r 以讀方式打開.文件必須存在w 以寫方式打開文件.若文件不存在,則創建,若存在,則清空原有內容 a 以追加模式打開.若文件不存在,則創建,若存在,也保留文件內容,并在文件末尾繼續寫 r+ 以讀寫模式打開 文件必須存在w+ 以讀寫模式打開文件不存在則創建,存在清空原有內容a+ 以讀寫模式打開 追加模式rb 以二進制讀模式打開 同rwb 以二進制寫模式打開 同wab 以二進制追加模式打開 同arb+ 以二進制讀寫模式打開 同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()操作,因為它沒有讀取得權限。如果讀取,則會報錯。
如下所示:
結果:
報錯!
若既想讀又想寫,則可以在各個參數值后添加【+】加號.如下圖所示:
總結
以上是生活随笔為你收集整理的网络编程(part2)--文件读写之打开/读取/写入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 街机游戏合体必杀赏析,专治各种 BOSS
- 下一篇: 3大理由决定企业 AI 必须“负责”