关于python:在不读取它的情况下查找csv中的行数

Find number of lines in csv without reading it

本问题已经有最佳答案,请猛点这里访问。

是否有一种方法可以在不将整个文件实际加载到内存(在python中)的情况下查找csv文件中的行数?

我希望它能有一些特殊的优化功能。我现在能想象的就是一行一行地读它,数数行数,但这有点扼杀了它所有可能的意义,因为我只需要行数,而不需要实际的内容。


您不需要将整个文件加载到内存中,因为文件的行是可重写的:

1
2
3
4
with open(path) as fp:
    count = 0
    for _ in fp:
        count += 1

或者,更惯用一点:

1
2
3
with open(path) as fp:
    for (count, _) in enumerate(fp, 1):
       pass


是的,在知道文件中有多少行之前,您需要在内存中读取整个文件。只需将文件看作一个长字符串aaaaabbbbbbcccccccddddddeeeee即可知道字符串中有多少"行",您需要找到其中有多少个字符。

如果你想要一个大概的数字,你可以读几行(~20行),看看每行有多少个字符,然后从文件的大小(存储在文件描述符中)得到一个可能的估计值。