美好的一天。我在下面有一些代码,它实现了每行文件读取和计数器迭代。
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
我的问题是,有没有方法可以确定当前文件中没有每行迭代的文本数据行数?
谢谢!
答案 0 :(得分:5)
一般来说不可能比阅读文件中的每个字符并计算换行符更好。
如果您了解有关文件内部结构的详细信息,则可能。例如,如果文件长度为1024kB,并且每行的长度为1kB,则可以推断文件中有1024行。
答案 1 :(得分:3)
我不确定Python是否具有该功能,非常怀疑它,但它本质上需要读取整个文件。换行符由\ n字符表示(实际上取决于系统),因此无法通过整个文件知道文件中存在多少行。
答案 2 :(得分:1)
不,这样的信息只能通过迭代整个文件的内容(或将整个文件读入内存来检索。但除非你确定文件总是小一点,否则不要考虑这样做)
即使你没有循环遍历文件内容,你调用的函数也会这样做。例如,len(f.readlines())
会将整个文件读入列表,以计算元素数量。由于您根本不需要存储文件内容,因此效率非常低。
答案 3 :(得分:1)
您可以使用 readlines()文件方法,这可能是最简单的。
如果您想要与众不同,可以使用 read()成员函数获取整个文件,并使用 collections.Counter 来计算CR,LF,CRLR LFCR字符组合 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())