网络编程(part2)--文件读写之打开/读取/写入
鄙人學(xué)習(xí)筆記
文章目錄
- 文件讀寫
- 打開(kāi)文件
- 舉個(gè)例子1(以讀方式打開(kāi))
- 舉個(gè)例子2(以寫方式打開(kāi))
- 讀取文件
- read
- 舉個(gè)例子1
- readline
- 舉個(gè)例子2(繼續(xù)用例子1的note.txt文件)
- readlines
- 舉個(gè)例子3
- for循環(huán)
- 舉個(gè)例子4
- 寫入文件
- write
- 舉個(gè)例子1
- writelines
- 舉個(gè)例子2
- 舉個(gè)例子3(以追加模式寫入)
文件讀寫
對(duì)文件實(shí)現(xiàn)讀寫的基本操作步驟為:打開(kāi)文件,讀寫文件,關(guān)閉文件。
本篇BLOG和本系列的下一篇BLOG會(huì)對(duì)文件讀寫的步驟進(jìn)行一一舉例說(shuō)明。
打開(kāi)文件
file_object = open(file_name, access_mode='r', buffering=-1) 功能:打開(kāi)一個(gè)文件,返回一個(gè)文件對(duì)象。 參數(shù):file_name————文件名;access_mode————打開(kāi)文件的方式,如果不寫默認(rèn)為‘r’ 文件模式 操作r 以讀方式打開(kāi).文件必須存在w 以寫方式打開(kāi)文件.若文件不存在,則創(chuàng)建,若存在,則清空原有內(nèi)容 a 以追加模式打開(kāi).若文件不存在,則創(chuàng)建,若存在,也保留文件內(nèi)容,并在文件末尾繼續(xù)寫 r+ 以讀寫模式打開(kāi) 文件必須存在w+ 以讀寫模式打開(kāi)文件不存在則創(chuàng)建,存在清空原有內(nèi)容a+ 以讀寫模式打開(kāi) 追加模式rb 以二進(jìn)制讀模式打開(kāi) 同rwb 以二進(jìn)制寫模式打開(kāi) 同wab 以二進(jìn)制追加模式打開(kāi) 同arb+ 以二進(jìn)制讀寫模式打開(kāi) 同r+wb+ 以二進(jìn)制讀寫模式打開(kāi) 同w+ab+ 以二進(jìn)制讀寫模式打開(kāi) 同a+buffering————參數(shù)0表示無(wú)緩沖,1表示有行緩沖,如果是大于1表示直接指明緩沖區(qū)大小。如果不寫或?yàn)樨?fù)數(shù)則表示使用系統(tǒng)默認(rèn)提供的緩沖機(jī)制。在py中,通常情況下這個(gè)參數(shù)我們都不寫,直接用系統(tǒng)默認(rèn)的就OK了. 返回值:成功返回文件流對(duì)象。失敗得到IOError。我們用open()打開(kāi)一個(gè)文件,會(huì)返回給變量fd一個(gè)文件對(duì)象。打開(kāi)一個(gè)文件之后,我們就可以對(duì)這個(gè)文件對(duì)象進(jìn)行讀寫操作了。
備注:buffering表示,開(kāi)辟的緩沖區(qū)類型。緩沖,表示系統(tǒng)自動(dòng)的在內(nèi)存中為每一個(gè)正在使用的文件開(kāi)辟一個(gè)緩沖區(qū),從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存緩沖區(qū),裝滿緩沖區(qū)在一起送到磁盤中去。這樣做,是為了減少與磁盤的交互次數(shù),從而提高效率、保護(hù)了磁盤。舉個(gè)例子:我們?cè)谟脀ord寫論文時(shí),寫了好幾頁(yè),但沒(méi)保存(假設(shè)word也沒(méi)有幫我們自動(dòng)保存),這些沒(méi)保存的論文,就在緩沖區(qū)內(nèi)。如果這時(shí)突然斷電(假設(shè)我們此時(shí)用的是臺(tái)式電腦)那么寫了那么久的論文就會(huì)丟失。
圖示:
舉個(gè)例子1(以讀方式打開(kāi))
我們?cè)谥鱬y文件test02.py所在的文件夾內(nèi)創(chuàng)建一個(gè)txt文件,里面寫一些數(shù)據(jù),如下圖所示:
我們?cè)谥鱬y文件中讀取文件:
結(jié)果:
備注:別忘了最后一定要關(guān)閉文件!
舉個(gè)例子2(以寫方式打開(kāi))
(1)若文件不存在
首先,我們看一下我們的文件列表:
在python中,我們打開(kāi)一個(gè)不存在的文件None.txt:
我們?cè)倏匆幌?#xff0c;文件列表:
新的文件創(chuàng)建出來(lái)了!
(2)文件存在, 且文件有內(nèi)容
查看一下我們的note.txt文件,結(jié)果:
清空了!
讀取文件
read
read([size])用來(lái)直接讀取字節(jié)到字符串中,最多讀取給定數(shù)目個(gè)字節(jié)。如果沒(méi)有給定size參數(shù)(默認(rèn)值為-1)或者size值為負(fù),文件將被讀取直至末尾。文件過(guò)大時(shí)候,不建議直接讀取到文件末尾,因?yàn)闀?huì)消耗大量?jī)?nèi)存,讀取時(shí)間也會(huì)更長(zhǎng),建議在non-blocking模式下使用。
舉個(gè)例子1
首先看一下我們的數(shù)據(jù)文件:
(1) 不設(shè)置size參數(shù),直接讀取到文件末尾
我們讀取一下:
輸出結(jié)果:
(2)一次讀取16個(gè)字節(jié)
①我們按照一次16個(gè)字節(jié)讀取文件:
輸出結(jié)果:
②我們按照一次1024個(gè)字節(jié)讀取文件:
輸出結(jié)果:
若一次想要讀取的字節(jié)數(shù),大于文件的字節(jié)數(shù),則文件有多少字節(jié),就讀取多少字節(jié)。
(3)一次讀取8個(gè)字節(jié),但仍然想讀完全部文件
循環(huán)讀取:
結(jié)果:
readline
readline([size])讀取打開(kāi)文件的一行(讀取下個(gè)行結(jié)束符之前的所有字節(jié))。沒(méi)有給定size參數(shù),則讀取整行整行,包括行結(jié)束符,并作為字符串返回。和 read() 相同,它也有一個(gè)可選的 size 參數(shù),默認(rèn)為 -1,代表讀至行結(jié)束符。如果提供了該參數(shù),如果行的字節(jié)數(shù)超過(guò)size,則會(huì)返回不完整的行。
舉個(gè)例子2(繼續(xù)用例子1的note.txt文件)
(1)不設(shè)置size參數(shù),讀取一行
我們讀取一下:
結(jié)果:
備注:當(dāng)我們沒(méi)有指定size時(shí),readline遇到換行符才會(huì)結(jié)束。
(1)設(shè)置size參數(shù)
①我們按照一次4個(gè)字節(jié)讀取行:
結(jié)果:
我們?cè)僮x取一次:
結(jié)果:
由結(jié)果可知,第二次讀取時(shí),readline會(huì)沿著第一次讀取的末尾,繼續(xù)讀取這一行剩下內(nèi)容。
readlines
readlines([sizeint])該方法并不像其它兩個(gè)輸入方法一樣返回一個(gè)字符串。它會(huì)讀取所有(剩余的)行然后把它們作為一個(gè)字符串列表返回。它的可選參數(shù)sizhint代表返回的最大字節(jié)大小,當(dāng)sizeint不足該行的字節(jié)數(shù)時(shí),也會(huì)得到這一行的內(nèi)容。我們?cè)谑褂脮r(shí),一般不設(shè)置參數(shù)。
舉個(gè)例子3
讀取:
結(jié)果:
由結(jié)果可知,每一行,讀取成了列表中的一個(gè)元素。
for循環(huán)
for line in fd:print(line)文件對(duì)象本身也是一個(gè)可迭代對(duì)象,在for循環(huán)中可以迭代文件的每一行。
舉個(gè)例子4
讀取:
結(jié)果:
寫入文件
write
write(string)功能與 read() 和 readline() 相反。它把含有文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)塊的字符串寫入到文件中去。
舉個(gè)例子1
我們向空文件None.txt寫入數(shù)據(jù):
結(jié)果:
再寫一行:
結(jié)果:
備注:如果想換行就要人為添加換行符\n。
writelines
writelines(str_list)和 readlines() 相反,writelines()方法是針對(duì)列表的操作,它接受一個(gè)字符串列表作為參數(shù),將它們寫入文件。行結(jié)束符并不會(huì)被自動(dòng)加入,所以如果需要的話,你必須在調(diào)用writelines()前給每行結(jié)尾加上行結(jié)束符。
舉個(gè)例子2
我們None.txt寫入數(shù)據(jù):
結(jié)果:
舉個(gè)例子3(以追加模式寫入)
原來(lái)的note.txt文件:
寫入:
結(jié)果:
備注:在追加模式a下,不能read()操作,因?yàn)樗鼪](méi)有讀取得權(quán)限。如果讀取,則會(huì)報(bào)錯(cuò)。
如下所示:
結(jié)果:
報(bào)錯(cuò)!
若既想讀又想寫,則可以在各個(gè)參數(shù)值后添加【+】加號(hào).如下圖所示:
總結(jié)
以上是生活随笔為你收集整理的网络编程(part2)--文件读写之打开/读取/写入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 街机游戏合体必杀赏析,专治各种 BOSS
- 下一篇: 3大理由决定企业 AI 必须“负责”