大家好广鳍,今天我們繼續(xù)聊聊Python中的文件操作荆几。 有一首詩,艾青的“我愛這土地”赊时,我們?cè)谏蠈W(xué)的時(shí)候都學(xué)過吧吨铸,我記得當(dāng)時(shí)老師是要求全文背誦的,時(shí)隔這么久祖秒,多多少少忘了些诞吱,不過有一句卻記憶猶新,“為什么我的眼里常含淚水竭缝?因?yàn)槲覍?duì)這土地愛得深沉 ”房维。今天我們就用Python試著讀一下這首詩,讓Python也學(xué)習(xí)一下我們中華兒女的家國(guó)情懷抬纸。
還是照舊咙俩,先用open方法打開文件,再用read方法讀取文件。
這阿趁,這不是我們想要的結(jié)果啊膜蛔,一股腦的全打印出來了,把詩的美感全破壞了脖阵,別急皂股,我們找找Python文檔,看有沒有辦法解決命黔。
誒呜呐,這個(gè)可以,readline悍募,從英文名字看就知道是讀一行卵史,OK,我們?cè)囈幌隆?/p>
倒是一行一行讀出來了搜立,可是每讀一行以躯,都要執(zhí)行一下readline方法,還是不方便啄踊,再找找看忧设,有沒有更好的方法。
readlines颠通,就是多好多行嘛址晕,參數(shù)是需要讀取的行數(shù),我們?cè)囈幌隆?/p>
看顿锰,已經(jīng)把所有文件存儲(chǔ)到一個(gè)列表中了谨垃,怎么打印出來呢?大家先回憶一下硼控,提示用for/in語句刘陶,OK,看看和我寫的一樣不一樣牢撼。
簡(jiǎn)直不能再完美了匙隔,哎呀,剛剛手一抖熏版,又敲了一行readline纷责,輸出結(jié)果如下圖所示。
看到這兒撼短,我陷入了沉思再膳。誒,這Python真是聰明啊曲横,它居然知道我讀完了喂柒,就啥也不給輸出了,可問題是假如我還想從頭或從某個(gè)位置再讀一遍文件該怎么辦?于是冥思苦讀胳喷,終于在文檔中找到了下面三個(gè)方法湃番。
先做一下簡(jiǎn)單解釋,我們通過open方法打開文件吭露,返回值是一個(gè)TextIOWrapper對(duì)象吠撮,這個(gè)大家可以用help語句看一下。
這個(gè)對(duì)象代表什么呢讲竿,百度翻譯上給的解釋是文件掃描器泥兰,雖然不算準(zhǔn)確,不過倒也符合中國(guó)人的思維習(xí)慣题禀,大家可以按這個(gè)來理解鞋诗,執(zhí)行完open方法后,文件內(nèi)容被一個(gè)挨一個(gè)地“掃描”進(jìn)這個(gè)對(duì)象中迈嘹,就好像是文件流(類比于水流削彬,大家可以想象一下),而且還有一個(gè)指針一直指著文件流的當(dāng)前位置秀仲,我們把這個(gè)指針稱作“文件流指針”融痛。
講解到這兒,就可以繼續(xù)介紹上面的三個(gè)方法了神僵,seek方法用于根據(jù)偏差值offset更改流的位置雁刷;seekable用于判斷該對(duì)象是否支持隨機(jī)訪問,如果不支持seek保礼、tell等方法都是不能用的沛励,所以保險(xiǎn)起見,應(yīng)先執(zhí)行一下seekable方法炮障;tell方法用于返回文件流的當(dāng)前位置目派,其實(shí)也就是“文件流指針”的值,??铝阐,分析完畢址貌,我們代碼中操作看看。
我們簡(jiǎn)單解釋一下上述代碼徘键,首先通過執(zhí)行seekable方法確認(rèn)該對(duì)象支持隨機(jī)訪問,然后通過調(diào)用tell方法獲取當(dāng)前的“文件流指針”值遍蟋,接下來通過執(zhí)行seek方法使得 “文件流指針”重新指向文件開頭吹害,最后通過調(diào)用readline方法輸出一行文本,由此也證明了seek方法的有效性虚青。
writeline方法和readline方法類似它呀,大家可以自己嘗試著學(xué)習(xí)一下,就當(dāng)是作業(yè)了。
OK纵穿,今天的Python“文件操作”學(xué)習(xí)就到這兒下隧,不過不要以為“文件操作”這塊內(nèi)容已經(jīng)結(jié)束了哈,其實(shí)還遠(yuǎn)遠(yuǎn)沒有呢谓媒,就像題目中說的那樣淆院,我們僅僅是做到了略知。