从字符串中删除“\n”,但保留实际的换行符?

Remove "\n" from a string, but leave the actual linebreaks?

我正在上 Python 课程,当前的作业是从数据库中获取信息,将其添加到文本框,然后根据其中的内容创建一个 HTML 文件文本框。

一切都很完美,换行符与我在数据库中输入的完全一样。唯一的问题是“{{”和“}}”在从数据库中检索到文本后被添加到文本周围。所以我把文本变成一个字符串,然后用 [3:-4] 切掉那些东西。但是,由于它现在是一个字符串,所以当它被输入到文本框中时,它现在会在文本中直接写入“\n”。

有没有办法切掉括号,不包括“\n”文本,但仍然保留换行符?

下面是文本框在我将其转换为字符串和切片之前显示的内容:

{{这是我的文字! 它看起来非常干净,因为它有换行符。 太棒了!}}

在我把它变成一个字符串并切断末端之后:

这是我的文字!\n\nThe 括号不见了,但现在您可以看到换行代码。\n\nLame!

我可以两全其美吗?这是我的代码:

    # Grabs info from database on button click
def getContent(self):
    c.execute("SELECT HTML FROM Content WHERE conName ='{}'".format(self.contentBox.get()))
    fetch = (c.fetchall())
    return str(fetch)[3:-4]

    # Inserts content into textbox
def setContent(self):
    self.clear()
    combo = self.getContent()
    self.text_body.insert(END,combo)

这意味着您的实际字符串中有 2 个“\”。 格式化后的实际字符串是: 这是我的文字!\\n\\n括号不见了,但现在你可以看到换行代码。\\n\\n蹩脚的! 额外的 \ 意味着 \n 实际上应该被打印出来,而不是被称为换行符。

问题的根源是您从数据库中以列表列表的形式取回数据(尽管内部列表可能是包含 HTML 的单个元素)当您要么将该数据直接插入到小部件中,要么使用 str 将该数据转换为字符串。

例如,您看到大括号的原因是文本小部件不知道如何显示列表列表,因此它使用大括号来描述列表项(这是一个很好的理由,但它很长的解释)。那些花括号不在数据库的实际数据中,它们是在您尝试将列表添加到文本小部件时添加的。

正确的解决方案是获取原始形式的数据库数据(列表列表或 HTML 元素列表)并智能地将其转换为字符串。然后,您将不再需要 trim 大括号或转换换行符,或进行任何其他类型的黑客攻击来使您的数据看起来正确。

例如,如果您想要在每行数据之间换行,并且在每列数据之间使用 space(假设您返回的不止一列),您可以像这样插入数据这个:

def getContent(self):
    c.execute("SELECT HTML FROM Content WHERE conName ='{}'".format(self.contentBox.get()))
    fetch = (c.fetchall())
    return  # return a list of lists

def setContent(self):
    self.clear()
    combo = self.getContent()
    for row in combo:
        # convert list of columns into a string, by joining
        # each column with a space
        text = " ".join(row) 

        # write this row, and a newline, to the text widget
        self.text_body.insert(END, text + "\n")

这可能不是适合您的精确解决方案,因为我不知道从数据库返回的确切数据是什么。关键是您需要知道数据库调用返回的数据类型(列表的列表),并巧妙地将这些数据转换为字符串。

您也可以选择创建一个单独的函数来转换数据,或者您可以在 getContent 中进行转换。重要的是要了解数据的格式(列表或数据库中的行),以及它需要的格式(字符串),并在获取数据之后和将数据传递给文本小部件。