【问题标题】:Go from '\\n' to '\n'从 '\\n' 到 '\n'
【发布时间】:2020-06-25 17:56:05
【问题描述】:

我想从控制台获取一个包含多行文本的输入。由于我想在单个输入中完成所有操作,因此我必须在中间标记 '\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'。

谁能帮我解决这个问题?

【问题讨论】:

  • 我实际上使用了 print() 函数,但无论哪种方式,我都在打印使用输入创建的数组,所以问题可能就在那里......
  • 当你打印一个列表时,你会得到换行符的转义表示。所以,print(["\n"]) 给你['\n'],即使那真的是一个字符的新行。如果您打印列表中的每个元素,您将得到真正的换行符,它在屏幕上看起来像一个空白行。
  • list(itertools.chain.from_iterable(x.split(" ,;.") for x in io.StringIO(text[6:-6]))) 这样的东西可能比逐个字符地迭代文本更简单、更快。
  • 但问题是,在函数上,我尝试过滤所有字符,如 ',' ';' '。'和 '\n'... 换行符甚至不应该在那里。我的目标是最终的矩阵只有单词,没有任何特殊字符。它真的“过滤”了所有这些,除了换行符
  • 仅供参考:快捷方式if text[i] in ' .,;' and cur:

标签: python input newline paragraph


【解决方案1】:

您没有提供用于测试的输入字符串,所以我自己制作了。你可以使用.split() 来分割新的行和空格(或任何你想要的)。

编辑:我想我现在明白你的意思了。我认为您在要求用户输入时试图让用户输入换行符\nThis isn't possible using input, but there is a workaround。我将该链接的答案集成到下面的代码中。

如果您希望用户在获得输入时手动写入\n,那么您需要将text.splitlines() 更改为text.split('\\n'). You could also replace\nwith\nby usingtext.replace(' \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?']]

【讨论】:

  • 我刚刚有机会测试它,它仍然将'\n'计为'\\n',我可以解决它,但只需更改第4行中的'\n'你的代码是 '\\n'... 是因为我实际上在输入中写了 '\n',所以它读作 '\\n'?
  • @TocaFonseca 在标题中唯一提到了\\n,所以我不清楚那是什么意思。您应该使用\\n 提供示例输入文本。基本上,` works as an escape character. So \\n` 不会被解释为换行符,而只是\\n 的文字字符串。提供一些示例输入文本或您用于获取输入的代码,我会更新答案。
  • @TocaFonseca 我想我误解了你原来的问题。我编辑了上面的答案。
【解决方案2】:
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']]

思路和斯图尔特的方案一样,只是效率高了一点。

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 2019-07-22
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多