Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 从'\\n';至'\n';_Python_Input_Newline_Paragraph - Fatal编程技术网

Python 从'\\n';至'\n';

Python 从'\\n';至'\n';,python,input,newline,paragraph,Python,Input,Newline,Paragraph,我想从控制台获得一个输入,它是一个有几行的文本。因为我想在一个输入中完成所有的操作,所以我必须在中间标记“\n”来表示不同的行。 在我得到输入后,我想将文本保存在一个矩阵中,其中每一行都是文本中的一行,单词是分开的 这是我的职责: def saveText(text): text = text[6:len(text)-6] line = 0 array = [[]] cur = "" for i in range (len(text)):

我想从控制台获得一个输入,它是一个有几行的文本。因为我想在一个输入中完成所有的操作,所以我必须在中间标记“\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
但是,当我打印变量数组时,它显示为一个只有一行的矩阵,除了“\n”被计算为单词外,它们还显示为“\n”


有人能帮我吗?

您没有提供用于测试的输入字符串,所以我自己做了。您可以使用
.split()
在新行和空格(或任何您想要的内容)上进行拆分

编辑:我想我现在明白你的意思了。我认为您试图让用户在请求输入时输入换行符
\n
。我将该链接的答案整合到下面的代码中

如果您希望用户在从中获取输入时手动写入
\n
,则需要将
text.splitlines()
更改为
text.split('\\n')。也可以使用
text.replace('\n','\n')`,将\n
替换为
\n

但是,我认为只使用多行输入(如下图所示,并在上文中进一步讨论)更不容易出错

行=[]
尽管如此:
行=输入()
如果行:
行。追加(行)
其他:
打破
输入文本='\n'。连接(行)
def保存_文本(文本):
行=文本。拆分行()
矩阵=[]
对于行中的行:
矩阵。追加(行。拆分(“”))
返回矩阵
打印(保存文本(输入文本))
来自用户的输入如下所示:

你好,怎么了 你是吗 做得很好 白天
产出:

[['hello', 'how'], ['are', 'you'], ['doing', 'this', 'fine'], ['day?']]
这将返回:

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

这个想法与Stuart的解决方案相同,只是效率高了一点。

我实际上使用了print()函数,但无论哪种方式,我都在打印用输入创建的数组,所以问题可能就在那里……当打印列表时,您会得到换行符的转义表示。因此,
print([“\n]”)
为您提供了
['\n']
,尽管这实际上是一个单字符的新行。如果你打印列表中的每个元素,你会得到一个真正的换行符,它看起来像是屏幕上的一个空行。类似于
list(itertools.chain.from_iterable(x.split(,;))for x in io.StringIO(text[6:-6]),
的东西可能比逐个字符迭代文本更简单、更快。但事实是,在函数中,我尝试过滤所有字符,如“,”;“.”和“\n”。。。那条新线根本就不该出现。我的目标是最终矩阵只有单词,没有任何特殊字符。它真的“过滤”了它们,除了newlineFYI:一个快捷方式
if text[i]in.,;'和cur:
我现在刚刚有机会测试它,它仍然将“\n”计算为“\\n”,我可以解决它,但只需通过“\\n”更改代码第4行中的“\n”。。。是不是因为我实际上在输入中写了“\n”,所以读作“\\n”?@TocaFonseca唯一提到的
\\n
是在标题中,所以我不清楚这是怎么回事。您应该提供带有
\\n
的示例输入文本。基本上,
`用作转义字符。因此,
\\n`不被解释为换行符,而只是
\\n
的文本字符串。提供一些示例输入文本或您用于获取输入的代码,我将更新答案。@TocaFonseca我想我误解了您最初的问题。我编辑了上面的答案。
[['line1:', 'hello', 'wolrd'], ['line2:', 'test'], ['line2:', 'i', "don't", 'know', 'what', 'to', 'write']]