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

时间:2016-05-02 02:22:16

标签: python tkinter sqlite textbox

我正在做Python课程,目前的任务是从数据库中获取信息,将其添加到文本框中,然后从文本框内的内容创建HTML文件。

一切都很完美,线条中断的确切方式是我将它们输入到数据库中。唯一的问题是在从数据库中检索文本后,“{{”和“}}”会在文本周围添加。所以我将文本转换为字符串并用[3:-4]切掉那些东西。但是,由于它现在是一个字符串,所以当它输入到文本框中时,它现在字面上将“\ n”写入文本。

无论如何切掉括号,不包括“\ n”文本,但仍保留换行符?

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

{{这是我的文字! 它看起来很干净,因为它有换行符。 甜!}}

在我把它作为一个字符串并切断两端之后:

这是我的文字!\ n \ n括号已经消失,但现在您可以看到换行符代码。\ 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 个答案:

答案 0 :(得分:1)

这意味着您的实际字符串有2' \'在里面。 格式化后的实际字符串是: 这是我的文字!\\ n \\ n括号已经消失,但现在你可以看到换行代码。\\ n \\ nLame! 额外的\意味着\ n应该实际打印,而不是称为换行符。

答案 1 :(得分:1)

问题的根源在于您将数据库中的数据作为列表列表返回(尽管内部列表可能是包含HTML的单个元素)当您将数据插入到字面上时,您会开始出现问题一个小部件,或者如果您使用str将该数据转换为字符串。

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

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

例如,如果您希望每行数据之间有一个换行符,并且每列数据之间都有一个空格(假设您要返回多个列),则可以插入如下数据:

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中进行转换。重要的是要了解数据的格式(数据库中的列表或行),以及它需要的格式(字符串),并在获取数据之后和将数据传递给数据之前进行适当的转换。文本小部件。