在python中读取逗号分隔值直到新的空行字符

时间:2017-02-12 23:34:48

标签: python

我想从STDIN读取输入:

1,0
0,0
1,0
1,0 

依此类推,直到新行为空(\ n)。这表示输入结束。

我做了这个

while (raw_input()!='\n'):
    actual,predicted=raw_input().split(',')

当我在最后一个输入中输入“enter”时,给我这个错误

0,0
0,1
1,0
1,1
1,1

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-23-3ec5186ad531> in <module>()
      5 
      6 while (raw_input()!='\n'):
----> 7     actual,predicted=raw_input().split(',')
      8     if (actual==1 and predicted==1):
      9         t_p+=50

ValueError: need more than 1 value to unpack

怎么了?

3 个答案:

答案 0 :(得分:2)

好的,这里有两个问题:raw_input剥离尾部换行符,因此空白输入变为空字符串,而不是换行符。

更大的问题是raw_input消耗了输入,因此您的代码无法正常工作 - 它只会处理每一行。 while循环调用raw_input(它使用了一些输入并丢弃它),然后循环体再次调用它并将其分配给实际和预测。

此任务的python习语是包含while True:的{​​{1}}循环:

break

答案 1 :(得分:0)

raw_input()会删除尾随换行符,因此您希望与''进行比较。

但是你在循环中一次也读两行,我想你想要更像的东西:

data = raw_input()
while (data != ''):
    actual,predicted=data.split(',')
    data = raw_input()

答案 2 :(得分:0)

在编写用户交互式程序时,确实使用了

raw_input。听起来你的程序是一个更典型的UNIX程序来处理文件输入。

sys.stdin是一个打开的文件。因此,您可以使用我最喜欢的Python功能,它迭代文件中的每一行。完全抛弃raw_input,只需将您的数据视为文件:

for line in sys.stdin:
    line = line.strip()
    parts = line.split(',')