Python 删除“\";从字符串开始,但保留实际的换行符?

Python 删除“\";从字符串开始,但保留实际的换行符?,python,tkinter,sqlite,textbox,Python,Tkinter,Sqlite,Textbox,我正在学习Python课程,当前的任务是从数据库中获取信息,将其添加到文本框中,然后从文本框中的内容创建一个HTML文件 每件事都很完美,行中出现了中断,这正是我在数据库中键入它们的方式。唯一的问题是,从数据库检索文本后,在文本周围添加了“{”和“}}”。因此,我将文本转换为字符串,并用[3:-4]切掉这些内容。但是,由于它现在是一个字符串,所以当它被输入到文本框中时,它会将“\n”逐字写入文本中 是否要切掉括号,不包括“\n”文本,但仍保留换行符 下面是文本框在我将其转换为字符串和切片之前显示

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

每件事都很完美,行中出现了中断,这正是我在数据库中键入它们的方式。唯一的问题是,从数据库检索文本后,在文本周围添加了“{”和“}}”。因此,我将文本转换为字符串,并用[3:-4]切掉这些内容。但是,由于它现在是一个字符串,所以当它被输入到文本框中时,它会将“\n”逐字写入文本中

是否要切掉括号,不包括“\n”文本,但仍保留换行符

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

{{这是我的文本! 它看起来很干净,因为它有断线。 好极了!}

在我把它做成一根绳子并把末端剪掉之后:

这是我的文字\n\n括号已消失,但现在可以看到换行符代码。\n\n名称

我能两全其美吗?这是我的密码:

    # 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元素列表)获取数据库数据,并智能地将其转换为字符串。然后,您将不再需要修剪大括号或转换换行符,或进行任何其他类型的黑客操作以使数据看起来正确

例如,如果希望在每一行数据之间换行,在每一列数据之间留一个空格(假设您要返回多个列),则可以按如下方式插入数据:

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

不要直接使用
str.format
,否则您将容易受到SQL注入的攻击。在我的脚本中访问数据库的唯一方法是从只读组合框中选择五个选项之一。@n攻击者可以轻松地在浏览器端修改组合框。永远不要信任客户。文本(框)会自动换行,即添加换行符。创建实例时将wrap=“none”传递给文本类。我会记住这一点!现在,学习如何将tkinter GUI与SQLite3结合只是一个简单的练习。没有一个是在线的,数据库里满是我编的愚蠢的东西。嗯,奇怪。。。你知道它是怎么到达那里的吗?如何移除它?