前面我們說r模式下,文件指針會跳到開始位置,然后f.read(),就是把這個文件的內(nèi)容一次性全部從硬盤讀入到內(nèi)存了。
這時候如果文件過大,f.read()就會有問題。如果這個文件幾十個G,你還能用f.read()嗎?
r模式下,f.read()是文佳指針從開頭讀到結(jié)尾,整個文件都給你度到內(nèi)存里面來,內(nèi)存一下就給占滿了,這樣的話32G內(nèi)存都不夠你用的。
當(dāng)然文件小的話這樣做沒問題,文件大的話就不行了。
現(xiàn)在我把讀到的內(nèi)容復(fù)制給res1,然后再打印一下res1.
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\a.txt', mode='rt', encoding='utf-8') as f:
...
res1=f.read()
print(res1)
接著我再用f.read()來讀一次。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\a.txt', mode='rt', encoding='utf-8') as f:
...
res1=f.read()
print(res1)
res2=f.read()
print(res2)
為了區(qū)分一下兩次讀寫的內(nèi)容,我在前面打印一下分隔符,center功能,80個字符用橫杠填充。
然后第二次讀我也這么打印一下。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\a.txt', mode='rt', encoding='utf-8') as f:
...
print('第一次讀'.center(80,'-'))
res1 = f.read()
print(res1)
print('第二次讀'.center(80,'-'))
res2 = f.read()
print(res2)
現(xiàn)在我要運行這個程序的話會發(fā)生什么?我們先來分析一下,f.read()前面是說過,讀完后文件指針在末尾了。
第二次讀,的時候文件指針就已經(jīng)在末尾了 ,就什么也讀不到。
我們來運行看看是不是分析的結(jié)果。
結(jié)果和我們分析的一樣。
所以只要我們呢個夠控制這個文件指針的移動是不是就可以隨性所欲想讀哪段內(nèi)容就可以讀哪段內(nèi)容了。
也可以避免r模式下的f.read()會一次性把整個文件內(nèi)容讀入內(nèi)存,造成內(nèi)存被占滿的問題。
控制文件指針是我們后面要講的,現(xiàn)在還有一個點你要注意。
你注意看,第一次讀完之后,有個換行。
為什么呢?我們的文件內(nèi)容不就是‘你好我喜歡你’這句話嗎?來看這個文件內(nèi)容。
這個文件里面本來就有個換行符,也就是說\n,雖然這個\n我們看不見,但是我們讀文件的時候這個\n也是會讀進(jìn)去的。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python 文件指針