最簡(jiǎn)單的辦法是把文件讀入一個(gè)大的列表中,然后統(tǒng)計(jì)列表的長(zhǎng)度.如果文件的路徑是以參數(shù)的形式filepath傳遞的,那么只用一行代碼就可以完成我們的需求了:
count = len(open(filepath,'rU').readlines())
如果是非常大的文件,上面的方法可能很慢,甚至失效.此時(shí),可以使用循環(huán)來(lái)處理:
count = -1
for count, line in enumerate(open(thefilepath, 'rU')):
pass
count += 1
另外一種處理大文件比較快的方法是統(tǒng)計(jì)文件中換行符的個(gè)數(shù) '\n '(或者包含 '\n' 的字串,如在 windows 系統(tǒng)中):
count = 0
thefile = open(thefilepath, 'rb')
while True:
buffer = thefile.read(8192*1024)
if not buffer:
break
count += buffer.count('\n')
thefile.close( )
參數(shù) 'rb' 是必須的,否則在 windows 系統(tǒng)上,上面的代碼會(huì)非常慢.
linecache 是專門支持讀取大文件,而且支持行式讀取的函數(shù)庫(kù)。 linecache 預(yù)先把文件讀入緩存起來(lái),后面如果你訪問(wèn)該文件的話就不再?gòu)挠脖P讀取
import linecache
count = linecache.getline(filename,linenum)
str = linecache.getlines(filename)
str 為列表形式,每一行為列表中的一個(gè)元素