Python ValueError

时间:2016-07-15 17:36:51

标签: python arrays

所以我一直收到这个错误:

  

ValueError:混合迭代和读取方法会丢失数据

并且1)我不太明白为什么我会收到它,2)有类似问题的人似乎在用他们的代码做事情比初学者(比如我自己)复杂得多可以适应。

我的代码的想法是读取data_file.txt并将每一行转换为它自己的单独数组。

到目前为止,我有这个:

raw_unicode_escape

我一直在收到错误。

"Value error: Mixing iteration and read methods would lose data "message while extracting numbers from a string from a .txt file using python

上面的问题似乎做了类似的事情,调用数组的项目,但是他的代码是跳过行并使用范围调用它的某些部分,我不需要它。我只需要调用所有行并将它们组成一个数组。

Python: Mixing files and loops

在这个问题中,再次提出了一些比我能理解得更多的东西。根据我的理解,他只想要一个在错误发生后重新启动的代码,并且答案是关于该部分的。再一次不是我想要的。

2 个答案:

答案 0 :(得分:2)

创建文件行的数组,每个数组元素一行:

with open('file.txt','r') as input_file:
    array = input_file.readlines()
return array

因为readlines会一次性为您提供整个文件。或者,

return list(open('file.txt','r'))

将按the docs执行相同操作。

答案 1 :(得分:2)

错误几乎是不言自明的(一旦你知道它是什么),所以这里就是。

您从循环for line in input_file:开始。文件对象可以在Python中迭代。它们遍历文件中的行。这意味着对于循环的每次迭代,line将包含文件中的下一行。

接下来,您手动阅读一行line = input_file.readlines()。这会尝试从文件中读取一行,但您已经在for循环中迭代了这些行。

文件通常按顺序读取,不会倒退。你最终得到的是一场冲突。如果使用readline读取一行,则循环中的迭代器将被强制在下一行之后返回该行,因为它无法返回。但是,有希望返回下一行。该错误告诉您readline知道有一个活动的迭代器,并且调用它会干扰循环。

如果您取出line = input_file.readlines(),循环将按照您的预期进行。