在 Python 中,如何从 txt 文件中读取未知行数?

In Python, how can I read a yet-unknown number of lines from a txt file?

这是用例。我有一个可能有数十万行的文本文件,其中: 第一行包含整数 N,这是后面的行数。我知道如何读取第一行并将其转换为 int;但是,我已经搜索了一种方法来从文件中读取该行数但没有成功。

例如: input.txt

4
foo
bar
carrot
snowflake

我将读取这些行并将其存储在变量中。没有空行。

如何从我的文本文件中获取接下来的 N 行,最好以 Pythonic 方式获取?

这是一种方法:

with open('file.txt') as f:
    n = int(next(f))
    lst = [next(f).strip() for i in range(n)]

您也可以选择忽略行数:

 with open('file.txt') as f:
    n = int(next(f))
    lst = [line.strip() for line in f]

在这两种情况下:

>>> n
4
>>> lst
['foo', 'bar', 'carrot', 'snowflake']

您可以使用从 1 开始枚举的 for 循环,并在行号达到所需数量时中断。

例子-

with open('<filename>','r') as f:
    file_list = []
    numlines = int(f.readline())
    for i, line in enumerate(f, 1):
        file_list.append(line.strip())
        if i >= numlines:
            break

另一种使用列表理解和 file.readline() -

的方法
with open('<filename>','r') as f:
    numlines = int(f.readline())
    file_list = [f.readline().strip() for _ in range(numlines)]

您可以使用 enumerate 来遍历行并从 1 开始给出索引,当达到所需的索引时您可以停止迭代

with open("coursera.txt") as inp:
    check=int(inp.next().strip())
    print check
    for line,value in enumerate(inp,1):
        print line,value
        if line==a:
            break

输出:

4
1 apple

2 cab

3 daog

4 bad

要删除额外的新行,您可以 strip 在打印或执行其他操作时添加这些行

您可以使用 itertools.islice,使用 next 获取 n 以获取第一行,然后将 n 传递给 islice 以获取下一个 n 行:

from itertools import islice

with open("in.txt") as f:
    n = int(next(f))
    lines = list(islice(f, n))

您也可以只遍历 islice 对象:

with open("in.txt") as f:
    n = int(next(f))
    for line in islice(f,n):
        print(line)