关于python:可以确定文件中存在多少行而不进行每行迭代?

it's possible to determine how many lines exist in file without per line iteration?

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

Possible Duplicate:
How to get line count cheaply in Python?

很好的一天。我下面有一些代码,它实现了每行文件读取和计数器迭代。

1
2
3
4
5
6
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

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

谢谢!


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

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


我不确定python是否有这个功能,高度怀疑它,但它本质上需要读取整个文件。换行符由字符表示(实际上取决于系统),因此,如果不浏览整个文件,就无法知道文件中存在多少换行符。


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

如果您希望有所不同,可以使用read()成员函数获取整个文件,并使用collections.counter类计算cr、lf、crlr和lfcr字符组合。但是,您必须处理各种终止线路的方法。类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import collections
f=open("myfile","rb")
d=f.read()
f.close()
c=collections.Counter(d)
lines1=c['

'
]
lines2=c['

'
]
lines3=c['
'
]-lines1-lines2
lines4=c['
'
]-lines1-lines2
nlines=lines3+lines4


不,只能通过迭代整个文件的内容(或将整个文件读取到内存中)来检索此类信息。但是,除非你确定文件总是很小,最好不要考虑这样做)。

即使您不循环文件内容,您调用的函数也是这样。例如,len(f.readlines())将把整个文件读取到一个列表中,只是为了计算元素的数量。这效率太低了,因为根本不需要存储文件内容。


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

1
    len(f.readlines())