【Python】如何高效获取大文件行数?

如何获取一个文本文件的行数?

接下来,我们对
【方法1】
思路:借助readlines

def readline_count(file_name):
    return len(open(file_name,encoding="utf-8").readlines())
cnt=readline_count(file_path)
print(cnt)

【方法2】
思路:依次读取文件每行内容进行计数:

def simple_count(file_name):
    lines = 0
    for _ in open(file_name):
        lines += 1
    return lines

【方法3】
思路:使用sum函数计数

def sum_count(file_name):
    return sum(1 for _ 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】
思路:每次读取固定大小,然后统计行数

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命令计算行

def wc_count(file_name):
    import subprocess
    out = subprocess.getoutput("wc -l %s" % file_name)
    return int(out.split()[0])

【方法7】
思路:在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】
思路:在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)

性能对比

方法100M500M1G10G
readline_count0.251.823.2745.04
simple_count0.130.851.5813.53
sum_count0.150.771.5914.07
enumerate_count0.150.801.6013.37
buff_count0.130.621.1810.21
wc_count0.090.530.999.47
partial_count0.120.551.118.92
iter_count0.080.420.838.33
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
获取文件内容的行数,可以使用以下几种方法方法1:使用readlines()函数读取文件的所有行,然后使用len()函数获取行数。例如: ``` with open(file_name) as f: lines = len(f.readlines()) ``` 方法2:使用循环逐行读取文件,并计数行数。例如: ``` def simple_count(file_name): lines = 0 for _ in open(file_name): lines += 1 return lines ``` 方法3:使用readline()函数逐行读取文件,并计数行数。例如: ``` def readline_count(file_name): lines = 0 with open(file_name) as f: while f.readline(): lines += 1 return lines ``` 方法4:使用enumerate()函数枚举文件的每一行,并计数行数。例如: ``` def enumerate_count(file_name): with open(file_name) as f: for count, _ in enumerate(f, 1): pass return count ``` 以上是几种常用的方法获取文件内容的行数。你可以根据自己的需求选择其中一种方法来使用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [python小技巧--获取文件制定行数的内容](https://blog.csdn.net/liwanlei19930623/article/details/119483037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【Python】如何高效获取文件行数?](https://blog.csdn.net/kz_java/article/details/118580734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值