本文實(shí)例講述了python中readline判斷文件讀取結(jié)束的方法。分享給大家供大家參考。具體分析如下:
大家知道,python中按行讀取文件可以使用readline函數(shù),下面現(xiàn)介紹一個(gè)按行遍歷讀取文件的方法,通過(guò)這個(gè)方法,展開(kāi)我們要討論的問(wèn)題:
filename = raw_input('Enter your file name') #輸入要遍歷讀取的文件路徑及文件名
file = open(filename,'r')
done = 0
while not done:
aLine = file.readline()
if(aLine != ''):
print aLine,
else:
done = 1
file.close() #關(guān)閉文件
上面是我們經(jīng)常看到的按行遍歷一個(gè)文件方法,你可能已經(jīng)注意到我在代碼中寫(xiě)的if(aLine != '' ):部分。當(dāng)readline讀取到為空的時(shí)候,意味著讀到了文件的結(jié)束。這個(gè)時(shí)候,問(wèn)題就在這里,很多人會(huì)想,是不是遇到一個(gè)空行,也會(huì)被認(rèn)為是文件的結(jié)束呢?這就引入了標(biāo)題的問(wèn)題。事實(shí)上,文件的空白行并不會(huì)返回一個(gè)空行。因?yàn)樵诿恳恍械哪┪策€有一個(gè)或者多個(gè)分隔符,因此“空白行”至少會(huì)有一個(gè)換行符或者系統(tǒng)使用的其他符號(hào)。所以,即使文件中真的包含一個(gè)“空白行”,讀入的行也不是空的,這就意味著在真實(shí)遍歷讀取到文件結(jié)束之前,程序?qū)嶋H上是不會(huì)停止的
readline() 和 .readlines() 非常相似。它們都在類似于以下的結(jié)構(gòu)中使用:
Python .readlines()
示例如下:
fh = open('c:/autoexec.bat')
for line in fh.readlines():
print line
.readline() 和 .readlines() 之間的差異是后者一次讀取整個(gè)文件,象 .read() 一樣。.readlines() 自動(dòng)將文件內(nèi)容分析成一個(gè)行的列表,該列表可以由 Python 的 for ... in ... 結(jié)構(gòu)進(jìn)行處理。另一方面,.readline() 每次只讀取一行,通常比 .readlines() 慢得多。僅當(dāng)沒(méi)有足夠內(nèi)存可以一次讀取整個(gè)文件時(shí),才應(yīng)該使用 .readline()。readlines返回行數(shù)問(wèn)題
官方文檔這樣寫(xiě)的:
If the optional sizehint argument is present, instead of reading up to EOF, whole lines totalling approximately sizehint bytes (possibly after rounding up to an internal buffer size) are read.
確實(shí)是指定大小啊并且會(huì)受內(nèi)部緩沖區(qū)大小影響向上取整到內(nèi)部緩沖區(qū)大小。內(nèi)部緩沖區(qū)大約是8k也難怪我每次測(cè)試文件大小都是8k(8192)倍數(shù)
#!/usr/bin/env python
f=open('a.txt').readlines(1)
open('b.txt','w').writelines(f)
open('c.txt','w').writelines(open('a.txt').readlines(200))
open('d.txt','w').writelines(open('a.txt').readlines(9200))
open('e.txt','w').writelines(open('a.txt').readlines(26000))
open('f.txt','w').writelines(open('a.txt').readlines(40000))
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。