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

如何在Python中逐行读取大型文本文件而不将其加载到内存中?

相野
2023-03-14
问题内容

我需要逐行读取一个大文件。可以说该文件的大小超过5GB,我需要读取每一行,但是显然我不想使用readlines()它,因为它将在内存中创建一个非常大的列表。

下面的代码在这种情况下将如何工作?xreadlines自身是否一一读取到内存中?是否需要生成器表达式?

f = (line for line in open("log.txt").xreadlines())  # how much is loaded in memory?

f.next()  

另外,与Linux tail命令一样,我该怎么做才能以相反的顺序阅读?


问题答案:

我提供此答案是因为Keith的提示虽然简洁,但并未明确关闭文件

with open("log.txt") as infile:
    for line in infile:
        do_something_with(line)


 类似资料:
  • 问题内容: 我在具有1GB RAM的Mac Mini上使用Python 2.6。我想阅读一个巨大的文本文件 因此,文件中的每一行都由两个逗号分隔的整数值组成的元组。我想阅读整个文件,并根据第二列对其进行排序。我知道,我可以进行排序而无需将整个文件读入内存。但我认为对于500MB的文件,由于我有1GB的可用空间,因此仍应该可以在内存中进行处理。 但是,当我尝试读取文件时,Python似乎分配了比磁盘

  • 问题内容: 我想遍历整个文件的每一行。一种方法是读取整个文件,将其保存到列表中,然后遍历感兴趣的行。此方法占用大量内存,因此我正在寻找替代方法。 到目前为止,我的代码: 执行此代码将显示错误消息:。 有什么建议么? 目的是计算成对的字符串相似度,这意味着对于文件中的每一行,我要计算每隔一行的距离。 问题答案: 正确的,完全Python的读取文件的方法如下: 该with语句处理文件的打开和关闭,包括

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

  • 问题内容: 如何在Python中读取文件的每一行并将每一行存储为列表中的元素? 我想逐行读取文件并将每一行追加到列表的末尾。 问题答案:

  • 问题内容: 我只想从Excel文件(xlsx)中读取10行,而不一次加载整个文件,因为这不能在我的一台计算机上完成(内存不足)。 我尝试使用 看来文件先被加载然后又被分成几部分。 如何只读取第一行? 问题答案: 由于文件的性质(本质上是一堆压缩在一起的文件),您不能将文件戳到任意字节,而希望它成为您感兴趣的表中表格的第N行的开头。 你能做的最好是用与(从文件顶部跳过行)和(从底部跳跃行)参数。但是

  • 问题内容: 我想将包含字符串的巨大文件合并为一个文件,并尝试使用nio2。我不想将整个文件加载到内存中,因此我尝试了BufferedReader: 我对此进行了尝试,但是,它的工作原理,字符串的格式(例如,新行等未复制到合并文件中): 如何在不将整个文件加载到内存的情况下将大型文件与NIO2合并? 问题答案: 如果您想有效地合并两个或多个文件,则应问自己,为什么要使用基础文件并执行该任务。 通过使