Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算某一行之后的行数_Python - Fatal编程技术网

Python 如何计算某一行之后的行数

Python 如何计算某一行之后的行数,python,Python,我正在尝试编写一个代码,它将计算特定行之后的行数。我想计算{ab}出现在我的文件中之后出现在我的文件中的所有行 {A B} 1 1 0.072 108.815 0.217 108.815 0.362 108.814 我的代码如下: from __future__ import with_statement def file_len(fname): with open(fname) as f: for i, l in enumerate(f):

我正在尝试编写一个代码,它将计算特定行之后的行数。我想计算{ab}出现在我的文件中之后出现在我的文件中的所有行

{A   B}
1     1
0.072 108.815
0.217 108.815
0.362 108.814
我的代码如下:

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

t=file_len("test.ghx")
print t
我不知道如何修改它来计算包含{ab}的特定行之后的行数


有人能分享一些想法吗?

跳过你要找的那一行,然后数一数剩下的几行:

def file_len(fname):
    with open(fname) as f:
        for line in f:
            if line.strip() == "{A   B}":
                break
        return sum(1 for line in f)

跳过要查找的行,并计算剩余的行数:

def file_len(fname):
    with open(fname) as f:
        for line in f:
            if line.strip() == "{A   B}":
                break
        return sum(1 for line in f)

计算文件中的总行数,检查标记出现的行,从总行数中减去

计算文件中的行总数,检查标记出现的行,从总数中减去

+1,但是rstrip可能真的是你的意思,而不是strip,no?OP说包括{abb},所以如果{abb}在一行中,可能是:{abb}是他想要的测试-在这种情况下,不需要strip。此外,对于f中的行,lenlistf比sum1更明显,尽管效率稍低,因为它必须创建一个列表。@EOL:不确定OP要寻找的确切逻辑是什么,但这当然可以很容易地进行调整。@benhoyt:lenlistf也可以,如果您不介意将整个文件内容保存在内存中的话。但是在iterable中,sum1 for x是提取iterable长度的一个相当常见的习惯用法,所以我认为在这里最好使用它。@Sven,啊,是的,关于大文件的内存使用的好消息。我放弃——只是简单的好于明显的好-+1,但是rstrip可能真的是你的意思,而不是条带,不?OP说包括{ab},所以如果{ab}在一行中,可能是:{ab}是他想要的测试-在这种情况下,不需要条带。此外,对于f中的行,lenlistf比sum1更明显,尽管效率稍低,因为它必须创建一个列表。@EOL:不确定OP要寻找的确切逻辑是什么,但这当然可以很容易地进行调整。@benhoyt:lenlistf也可以,如果您不介意将整个文件内容保存在内存中的话。但是在iterable中,sum1 for x是提取iterable长度的一个相当常见的习惯用法,所以我认为在这里最好使用它。@Sven,啊,是的,关于大文件的内存使用的好消息。我放弃——只是简单的好于明显的好-@user741592:这是一种很好的计算行数的方法。通常的惯例是使用u作为变量名,而不是l,这样可以显示实际的行读取没有使用。然而,在我看来,斯文的回答很好。@user741592:这是一个很好的计算行数的方法。通常的惯例是使用u作为变量名,而不是l,这样可以显示实际的行读取没有使用。不过,在我看来,斯文的回答很好。