Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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—通过STDIN中的多行数据解析以存储在标准数组中_Python_Arrays_Python 3.x_Stdin_Sys - Fatal编程技术网

Python—通过STDIN中的多行数据解析以存储在标准数组中

Python—通过STDIN中的多行数据解析以存储在标准数组中,python,arrays,python-3.x,stdin,sys,Python,Arrays,Python 3.x,Stdin,Sys,我已经讨论了所提出的类似问题,但似乎陷入了死胡同;可能是因为我没有充分解释我的问题。 我正在尝试使用一些我可以访问的标准DIN,看起来是这样的: 0 80 90 29 20 我遇到的问题是将第一行后面的整数存储到标准Python数组中 [80, 90, 29, 20] 第一行上的第一个输入总是一些整数0或1,表示禁用/启用某些“特殊功能”,然后输入任何其他整数,这些整数必须存储到标准数组中。正如您所看到的,一些整数本身有行,而其他行可能有多个整数(应该完全忽略空行)。 我一直在尝试使用s

我已经讨论了所提出的类似问题,但似乎陷入了死胡同;可能是因为我没有充分解释我的问题。 我正在尝试使用一些我可以访问的标准DIN,看起来是这样的:

0

80
90 29

20
我遇到的问题是将第一行后面的整数存储到标准Python数组中

[80, 90, 29, 20]
第一行上的第一个输入总是一些整数0或1,表示禁用/启用某些“特殊功能”,然后输入任何其他整数,这些整数必须存储到标准数组中。正如您所看到的,一些整数本身有行,而其他行可能有多个整数(应该完全忽略空行)。 我一直在尝试使用sys.stdin解决这个问题,因为我知道在剥离内容之后,它已经将输入输入到列表对象中,但是没有什么用处。 我的代码如下:

parse = True
arry = []
print('Special Feature?  (Give 0 to disable feature.)')
feature = input()
print('Please give the input data:')
while parse:
    line = sys.stdin.readline().rstrip('\n')
    if line == 'quit':
        parse = False
    else:
        arry.append(line)
print('INPUT DATA:', arry)
“退出”是我尝试的一个后门,我可以手动输入,因为我也不知道如何检查EOF。我知道这是非常简单的(几乎没有什么),但我实际上希望产生以下输出:

Special Feature?  (Give 0 to disable feature.)
> 0
Please give the input data:
> 80 90 29 20
INPUT DATA: [80, 90, 29, 20]
标有“>”的行没有打印出来,我只是演示输入在概念上应该如何读取。
当然,任何和所有的帮助都是感激的,我期待着您的想法

您可以迭代
sys.stdin
(阅读更多)

为了存储数字,只需编写从字符串中提取数字的代码,然后将数字附加到列表中

这里有一个例子

import sys
parse = True
arry = []
print('Special Feature?  (Give 0 to disable feature.)')
feature = input()
print('Please give the input data:')
for l in sys.stdin:
    arry += l.strip().split() 
print('INPUT DATA:', arry)
创建新文件,例如
数据

0
1 2 3
4 5 6
现在试着运行这个程序

$python3 f.py

每个数字都是从文件中读取的。

如果您确实想保持
sys.stdin
(尽管
input()
),可以使用以下方法:

import sys

parse = True
arry = []
print('Special Feature?  (Give 0 to disable feature.)')
feature = input()
print('Please give the input data:')
while parse:
    line = sys.stdin.readline().rstrip('\n')
    if line == 'quit':
        parse = False
    elif line !='':
        arry += [int(x) for x in line.split()]
print('INPUT DATA:', arry)
输入:

Special Feature?  (Give 0 to disable feature.)
1
Please give the input data:
10

20

22


1 3 5 0

quit
输出(输入数字转换为整数):


很抱歉,我忘了提到我想用实际整数而不是字符串表示形式打印“输入数据”。然而,这并没有给转换带来任何麻烦,所以这个答案非常适合我的需要。谢谢你的帮助!这太棒了;另一位用户指出,我可以迭代sys.stdin,而无需先遍历.readline()。不过,我非常感谢您将我的“后门”保持在原来的while状态,以及列表理解。非常感谢。
INPUT DATA: [10, 20, 22, 1, 3, 5, 0]