计算在Python中无法正常工作的长文件的行数

2024-04-19 11:26:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在计算一个很长文件的行数(超过635000行)。你知道吗

我试过:

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

还有:

num_lines = sum(1 for line in open(fname))

两者都适用于行数不多的文件。我已经检查了制作一个5行文件,工作正常,输出是5。你知道吗

但是对于一个长文件,它正好有635474行,上面发布的两个方法的输出都是635466。你知道吗

我知道文件有635474行,而不是635466行,因为我在文件内部创建字符串,最后两行是:

alm_asdf_alarm635473=.NOT USED
alm_asdf_alarm635474=.NOT USED

而且因为如果我打开带有Notepad++的文件,最后一行被计算为635474。你知道吗

这背后的逻辑是什么?为什么数的线比真的少?你知道吗

提前谢谢。你知道吗


Tags: 文件inforlendefaswithnot
1条回答
网友
1楼 · 发布于 2024-04-19 11:26:24

如果所有行的结构都相同,您可以尝试这样的程序:

import re
num = re.compile('[^0-9]*([0-9]+)')
delta = 1 # initial delta
with open(...) as fd:
    for i, line in enumerate(fd, delta):
        m = num.match(line)
        if i != int(m.group(1)):
            print i, "th line for number ", int(m.group(1))
            break

找到有差异的第一行就足够了(这里的delta表示第一行的内部编号是1而不是0)。然后您就可以更容易地理解问题真正来自notepad++。你知道吗

注意:如果只有一些行具有此结构,则可以使用该变体:

        m = num.match(line)
        if (m is not None) and (i != int(m.group(1))):

相关问题 更多 >