Python计算大文件行数方法及性能比较
生活随笔
收集整理的這篇文章主要介紹了
Python计算大文件行数方法及性能比较
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何使用Python快速高效地統計出大文件的總行數, 下面是一些實現方法和性能的比較。
1.readline讀所有行
使用readlines方法讀取所有行:
def readline_count(file_name):return len(open(file_name).readlines())2.依次讀取每行
依次讀取文件每行內容進行計數:
def simple_count(file_name):lines = 0for _ in open(file_name):lines += 1return lines3.sum計數
使用sum函數計數:
def sum_count(file_name):return sum(1 for _ in open(file_name))4.enumerate枚舉計數:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def enumerate_count(file_name):with open(file_name) as f:for count, _ in enumerate(f, 1):passreturn count5.buff count
每次讀取固定大小,然后統計行數:
def buff_count(file_name):with open(file_name, 'rb') as f:count = 0buf_size = 1024 * 1024buf = f.read(buf_size)while buf:count += buf.count(b'\n')buf = f.read(buf_size)return count6.wc count
調用使用wc命令計算行:
def wc_count(file_name):import subprocessout = subprocess.getoutput("wc -l %s" % file_name)return int(out.split()[0])7.partial count
在buff_count基礎上引入partial:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def partial_count(file_name):from functools import partialbuffer = 1024 * 1024with 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 * 1024with 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面试题:如何判断字典a在字典
- 下一篇: Django中六个常用的自定义装饰器