由于数量很大,所以一般的遍历方法耗时严重,
所以我推荐使用迭代器来做:
with open(res.FILE_PATH[tsv_name], encoding="gb18030", errors="ignore") as f:
count = sum(1 for _ in f)
可以看到迭代4503241行数据的耗时
还有个效率极高的方法:
# 高效计算文件行数
# file_name: 携带路径的文件名字
def iter_count(file_name: str):
from itertools import (takewhile, repeat)
buffer = 1024 * 1024
with open(file_name, errors='ignore') 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)
效率是前面那种的10倍左右。
也可以用:
.read_chunk(n)