Python - Разбор нескольких строк данных из STDIN для хранения в стандартном массиве. - PullRequest
1 голос
/ 02 мая 2020

Я прошел через предложенные подобные вопросы, однако, похоже, зашел в тупик; скорее всего, потому что, возможно, я не объясняю адекватно свою проблему. Я пытаюсь взять какой-нибудь STDIN, к которому у меня есть доступ, который выглядит так:

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. Я знаю, что это очень скромно (почти ничего), но что я эффективно произвожу sh для вывода, так это:

Special Feature?  (Give 0 to disable feature.)
> 0
Please give the input data:
> 80 90 29 20
INPUT DATA: [80, 90, 29, 20]

Строки, отмеченные знаком «>», не печатаются Я просто демонстрирую, как концептуально предполагается, что ввод будет прочитан. Конечно, любая помощь приветствуется, я с нетерпением жду ваших мыслей!

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Если вы действительно хотите сохранить 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

Вывод (преобразованы входные числа) в целые числа):

INPUT DATA: [10, 20, 22, 1, 3, 5, 0]
1 голос
/ 02 мая 2020

Вы можете перебрать 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)

Создайте новый файл, например data:

0
1 2 3
4 5 6

Теперь попробуйте запустить программу

$ python3 f.py < data
Special Feature?  (Give 0 to disable feature.)
Please give the input data:
INPUT DATA: ['1', '2', '3', '4', '5', '6']

Каждое число читается из файла.

...