没有每行迭代可以确定文件中存在多少行?

时间:2012-05-12 08:25:02

标签: python algorithm filesystems

  

可能重复:
  How to get line count cheaply in 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

我的问题是,有没有方法可以确定当前文件中没有每行迭代的文本数据行数?

谢谢!

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

不,这样的信息只能通过迭代整个文件的内容(或将整个文件读入内存来检索。但除非你确定文件总是小一点,否则不要考虑这样做)

即使没有循环遍历文件内容,你调用的函数也会这样做。例如,len(f.readlines())会将整个文件读入列表,以计算元素数量。由于您根本不需要存储文件内容,因此效率非常低。

答案 3 :(得分:1)

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

如果您想要与众不同,可以使用 read()成员函数获取整个文件,并使用 collections.Counter class。
但是,您必须处理各种终止线路的方法 像:

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

答案 4 :(得分:0)

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

    len(f.readlines())