4

可能重复:
如何在 Python 中廉价地获得行数?

再会。我在下面有一些代码,它实现了每行文件读取和计数器迭代。

def __set_quantity_filled_lines_in_file(self):
    count = 0
    with open(self.filename, 'r') as f:
        for line in f:
             count += 1
    return count

我的问题是,是否有方法可以确定当前文件中有多少行文本数据而无需每行迭代?

谢谢!

4

5 回答 5

5

一般来说,不可能比读取文件中的每个字符并计算换行符做得更好。

如果您知道有关文件内部结构的详细信息,则可能是可能的。例如,如果文件长度为 1024kB,每行长度为 1kB,则可以推断出文件中有 1024 行。

于 2012-05-12T08:53:15.497 回答
3

我不确定 Python 是否具有该功能,非常怀疑它,但它本质上需要读取整个文件。换行符由 \n 字符(实际上取决于系统)表示,因此如果不遍历整个文件,就无法知道文件中存在多少个换行符。

于 2012-05-12T08:30:24.413 回答
1

不,此类信息只能通过遍历整个文件的内容(或将整个文件读入内存)来检索。但除非您确定文件总是很小,否则最好不要考虑这样做)。

即使不遍历文件内容,您调用的函数也会执行。例如,len(f.readlines())整个文件读入一个列表只是为了计算元素的数量。这是非常低效的,因为您根本不需要存储文件内容。

于 2012-05-12T08:27:56.757 回答
1

您可以使用readlines()文件方法,这可能是最简单的。

如果您想与众不同,可以使用read()成员函数获取整个文件并使用collections.Counter类计算 CR、LF、CRLR LFCR 字符组合。
但是,您将不得不处理终止线路的各种方式。
就像是:

import collections
f=open("myfile","rb")
d=f.read()
f.close()
c=collections.Counter(d)
lines1=c['\r\n']
lines2=c['\n\r']
lines3=c['\r']-lines1-lines2
lines4=c['\n']-lines1-lines2
nlines=lines3+lines4
于 2012-05-12T08:48:01.273 回答
0

这给出了答案,但会读取整个文件并将行存储在列表中

    len(f.readlines())
于 2012-05-12T08:35:05.567 回答