Go от '\\ n' до '\ n' - PullRequest
       105

Go от '\\ n' до '\ n'

1 голос
/ 13 марта 2020

Я хочу получить от консоли ввод текста, состоящий из нескольких строк. Поскольку я хочу сделать все это на одном входе, я должен отметить '\ n' в середине, чтобы сигнализировать о разных строках. После того, как я получу ввод, я хочу сохранить текст в матрице, где каждая строка является строкой из текста с разделенными словами.

Это моя функция:

def saveText(text):
    text = text[6:len(text)-6]
    line = 0
    array = [[]]
    cur = ""
    for i in range (len(text)):
        if (text[i] == '\n'):
            line+=1
            array.append([])
        else:
            if ((text[i] == ' ' or text[i] == ',' or text[i] == ';' or text[i] == '.') and cur != ""):
                array[line].append(cur)
                cur = ""
            else:
                cur += text[i]
    return array

Однако, когда я печатаю переменную array , она отображается в виде матрицы с одной строкой, и, кроме того, что \ n считаются как слова, они также отображаются как \ n.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 13 марта 2020
text = "line1: hello wolrd\nline2: test\nline2: i don't know what to write"
lines = [x.split() for x in text.split("\n")]
print(lines)

Это вернет:

[['line1:', 'hello', 'wolrd'], ['line2:', 'test'], ['line2:', 'i', "don't", 'know', 'what', 'to', 'write']]

Идея такая же, как и у решения Стюарта, просто немного эффективнее.

1 голос
/ 13 марта 2020

Вы не предоставили входную строку для тестирования, поэтому я просто создал собственную. Вы можете использовать .split(), чтобы разделить на новые строки и пробелы (или что-нибудь еще, что вы хотите).

Редактировать: Я думаю, я понимаю, что вы имеете в виду сейчас. Я думаю, что вы пытаетесь, чтобы пользователь вводил символы новой строки \n при запросе их ввода. Это невозможно при использовании input, но есть обходной путь . Я включил ответ по этой ссылке в код ниже.

Если вы вместо этого хотите, чтобы пользователь вручную писал \n при получении ввода от них, вам необходимо изменить text.splitlines() на text.split('\\n'). You could also replace \ n with \ n by using текст. заменить ('\ n', '\ n') `.

Но, я думаю, было бы менее подверженным ошибкам просто использовать многострочный ввод, как показано ниже и обсужден далее, как описано выше.

lines = []
while True:
    line = input()
    if line:
        lines.append(line)
    else:
        break

input_text = '\n'.join(lines)

def save_text(text):
    lines = text.splitlines()
    matrix = []
    for line in lines:
        matrix.append(line.split(' '))
    return matrix

print(save_text(input_text))

Ввод от пользователя выглядит следующим образом :

hello how
are you
doing this fine
day?

выходы:

[['hello', 'how'], ['are', 'you'], ['doing', 'this', 'fine'], ['day?']]
...