Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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_Text_Io_Text Files - Fatal编程技术网

Python—如何在不将所有数据同时存储在主内存中的情况下存储文本文件中的数据?

Python—如何在不将所有数据同时存储在主内存中的情况下存储文本文件中的数据?,python,text,io,text-files,Python,Text,Io,Text Files,我有一个文本文件,它的行数未知。每行为“0”或“1” 我需要分析文本文件,例如,我需要找出文件中有多少个1和0 那么,这样做是否不正确 fo = open("data.txt", "r") numbers = fo.read().splitlines() fo.close() 你可以试着逐行读 count = 0 with open("data.txt", "r") as fo: for line in fo: count += int(line) 这不会一次读取所有

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

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

那么,这样做是否不正确

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

你可以试着逐行读

count = 0
with open("data.txt", "r") as fo:
    for line in fo:
        count += int(line)
这不会一次读取所有数据,而是一次读取一行数据。当您将
一起使用时,您不需要显式关闭该文件,它将在读取整个文件后自动关闭

这个答案假设文件采用您提到的格式,每行为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

该代码将整个文件内容读入一个临时字符串。然后将该字符串拆分为字符串列表。然后它就去掉了临时字符串。所以它使用了相当多的RAM。如Prashant Sethi的回答所示,逐行迭代文件要好得多。如果要将其用作
dict
键,则应运行
.strip()
以去除空白,尤其是尾随的换行符。当然,您的第一个代码块不需要它,因为
int()
将忽略前导和尾随空格。谢谢!我现在加了那个电话。