【问题标题】:Python - How can I store data from a text file without storing all data simultaneously in the primary memory?Python - 如何在不将所有数据同时存储在主内存中的情况下存储文本文件中的数据?
【发布时间】:2016-03-06 17:49:19
【问题描述】:

我有一个行数未知的文本文件。每行是“0”或“1”。

我需要分析文本文件,例如我需要找出文件中有多少个1和0。

那么这样做会不会不正确?

fo = open("data.txt", "r")
numbers = fo.read().splitlines()
fo.close()

【问题讨论】:

  • 该代码将整个文件内容读入一个临时字符串。然后它将该字符串拆分为字符串列表。然后它摆脱了临时字符串。所以它使用了相当多的RAM。如 Prashant Sethi 的回答所示,逐行遍历文件要好得多。

标签: python text io text-files


【解决方案1】:

你可以试着逐行阅读

count = 0
with open("data.txt", "r") as fo:
    for line in fo:
        count += int(line)

这不会一次读取所有数据,而是一次读取一行。当你使用with时,你不需要显式关闭文件,当整个文件被读取时它会自动关闭。

此答案假定文件采用您提到的格式,每行为 0 或 1,并给出 1 的数量作为输出。

对于 0 和 1,你可以使用这个:

count = {"0": 0, "1": 0}
with open("data.txt", "r") as fo:
    for line in fo:
        line = line.strip()
        count[line] = count.get(line) + 1

【讨论】:

  • 如果您想将其用作dict 键,您应该运行line.strip() 以消除空格,尤其是尾随换行符。当然,您的第一个代码块不需要它,因为 int() 将忽略前导和尾随空格。
  • 谢谢!我现在添加了那个调用。
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 2017-08-28
  • 2013-12-23
  • 2011-08-31
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多