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

  • 本文关键字:字符 python 分隔 读取 python
  • 更新时间 :
  • 英文 :


我想像这样从STDIN读取输入:

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

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

我做到了

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

当我在上次输入中输入"输入"时给了我这个错误

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

怎么了?

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

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

此任务的 python 习语是一个包含breakwhile True:循环:

while True:
    line = raw_input()
    if not line:
        break
    actual, predicted = line.split(",")
    print("a, p", actual, predicted)
print("done!")

raw_input()去掉尾随换行符,因此您要与''进行比较。

但是你也在循环中一次阅读两行,我认为你想要更像:

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

raw_input在编写用户交互式程序时真正使用。听起来你的程序是一个更典型的UNIX程序,它处理文件输入。

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

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

最新更新