当前位置: 首页 > 面试题库 >

如何在Python中一次读取文件N行?

梁修贤
2023-03-14
问题内容

我需要一次最多读取N行来读取一个大文件,直到EOF。在Python中最有效的方法是什么?就像是:

with open(filename, 'r') as infile:
    while not EOF:
        lines = [get next N lines]
        process(lines)

问题答案:

一种解决方案是列表理解和分片运算符:

with open(filename, 'r') as infile:
    lines = [line for line in infile][:N]

在这之后lines是行的元组。但是,这会将整个文件加载到内存中。如果您不希望这样做(即文件可能真的很大),则可以使用生成器表达式和isliceitertools包中的另一种解决方案:

from itertools import islice
with open(filename, 'r') as infile:
    lines_gen = islice(infile, N)

lines_gen 是一个生成器对象,它为您提供文件的每一行,并且可以在这样的循环中使用:

for line in lines_gen:
    print line

两种解决方案都最多提供N行(如果文件没有那么多,则更少)。



 类似资料:
  • 问题内容: 我想一次从文件中读取一个数字列表作为一个字符,一次检查一个字符,以检查该字符是什么,是否是数字,句点,+或-,e或E或其他一些字符。 ..然后基于此执行我想要的任何操作。如何使用已有的现有代码执行此操作?这是我尝试过的示例,但是没有用。我是python的新手。提前致谢! 问题答案: 从文件中读取行。以文本块的形式读取整个文件,然后遍历文本的每个字符:

  • 问题内容: 我正在编写一个解析文本文件的python脚本。此文本文件的格式是这样的,文件中的每个元素都使用两行,为了方便起见,我想在解析之前先读取这两行。可以用Python完成吗? 我想要一些类似的东西: 但这打破了这样的说法: ValueError:混合迭代和读取方法将丢失数据 问题答案: 这里有类似的问题。您不能混合使用迭代和readline,因此您需要使用其中之一。

  • 问题内容: 我正在尝试一次读取一行大文件。我在Quora上发现了一个与该主题有关的问题,但我缺少一些联系以使整个组件组合在一起。 我想弄清楚的一点是,如何一次从文件而不是如本示例中的STDIN读取一行。 我试过了: 但它不起作用。我知道,在紧急情况下,我可能会转而使用PHP之类的东西,但是我想弄清楚这一点。 我不认为其他答案会起作用,因为该文件比我在其上运行的具有内存的服务器大得多。 问题答案:

  • 问题内容: 谁能告诉我该怎么做? 问题答案:

  • 问题内容: 我想将文件读入Java的String中,一次x个字符。然后,我将对字符串进行某些操作,并希望从我中断的地方继续。我该怎么办? 编辑: 目标文件是一个简单的文本文件。 问题答案: 好吧,首先您需要区分 字节 和 字符 。您可以一次从一定数量的字节中读取(作为最大数量;不能保证您将获得所需的所有字节),并且一次可以读取多个字符(再次,最大)。 听起来您 可能 想要在周围使用,指定适当的字符

  • 问题内容: 在史前时代(Python 1.4)中,我们做到了: 在Python 2.1之后,我们做到了: 在Python 2.3中获得便利的迭代器协议之前,它可以做到: 我看过一些使用更详细的示例: 这是首选的方法吗? [edit]我知道with语句可以确保关闭文件…但是为什么文件对象的迭代器协议中没有包含该语句呢? 问题答案: 偏爱以下原因的确有一个原因: 我们都为CPython的相对确定性的引