Python計算大檔案行數方法及效能比較

2021-10-09 12:27:16 字數 2687 閱讀 5337

如何使用python快速高效地統計出大檔案的總行數, 下面是一些實現方法和效能的比較。

1.readline讀所有行

使用readlines方法讀取所有行:

def

readline_count

(file_name)

:return

len(

open

(file_name)

.readlines(

))

2.依次讀取每行依次讀取檔案每行內容進行計數:

def

******_count

(file_name)

: lines =

0for _ in

open

(file_name)

: lines +=

1return lines

3.sum計數使用sum函式計數:

def

sum_count

(file_name)

:return

sum(

1for _ in

open

(file_name)

)

4.enumerate列舉計數:

'''

'''def

enumerate_count

(file_name)

:with

open

(file_name)

as f:

for count, _ in

enumerate

(f,1):

pass

return count

5.buff count每次讀取固定大小,然後統計行數:

def

buff_count

(file_name)

:with

open

(file_name,

'rb'

)as f:

count =

0 buf_size =

1024

*1024

buf = f.read(buf_size)

while buf:

count += buf.count(b'\n'

) buf = f.read(buf_size)

return count

6.wc count呼叫使用wc命令計算行:

'''

'''def

wc_count

(file_name)

:import subprocess

out = subprocess.getoutput(

"wc -l %s"

% file_name)

return

int(out.split()[0])

7.partial count在buff_count基礎上引入partial:

'''

'''def

partial_count

(file_name)

:from functools import partial

buffer

=1024

*1024

with

open

(file_name)

as f:

return

sum(x.count(

'\n'

)for x in

iter

(partial(f.read,

buffer),

''))

8.iter count在buff_count基礎上引入itertools模組 :

def

iter_count

(file_name)

:from itertools import

(takewhile, repeat)

buffer

=1024

*1024

with

open

(file_name)

as f:

buf_gen = takewhile(

lambda x: x,

(f.read(

buffer

)for _ in repeat(

none))

)return

sum(buf.count(

'\n'

)for buf in buf_gen)

下面是在我本機 4c8g python3.6的環境下,分別測試100m、500m、1g、10g大小檔案執行的時間,單位秒:

Python計算大檔案行數方法及效能比較

如何使用python快速高效地統計出大檔案的總行數,下面是一些實現方法和效能的比較。1.readline讀所有行 使用readlines方法讀取所有行 def readline count file name return len open file name readlines 2.依次讀取每行依...

python獲取大檔案行數

背景 處理一些日誌或者請求資料時,幾百萬行的資料,有時候在做效能測試任務時估算出大概需要的詞表數,需要一定行數的資料,需要提前看下原始檔案大小,在這記一下,的確比較快 如下 獲取檔案行數,一塊一塊讀取 def get file lines filepath with open filepath,rb...

python計算檔案的行數的方法

1 簡單方法 把檔案讀入乙個大的列表中,然後統計列表的長度。如果檔案的路徑是以引數的形式filepath傳遞的,那麼只用一行 即可 count len open filepath,ru readlines 如果是非常大的檔案,上面的方法可能很慢,甚至失效。count len open 檔名 read...