如何从python的输出中删除大括号?

问题描述

我是Python的新手,我一周前才开始学习,而且我一直被困在这里...任何帮助将不胜感激...

谢谢。

from tkinter import *
import tkinter as tk
import psycopg2

root = Tk()

def get_info(Employee_Name,Department,Education,Salary):
   con = psycopg2.connect(dbname = 'postgres',user = 'postgres',password = 'Gaurav@31',host = 'localhost',port = 5432)
   cur = con.cursor()
   query = ('''INSERT INTO Employee (Employee_name,Salary) VALUES (%s,%s,%s);''' )
   cur.execute(query,(Employee_Name,Salary))
   print('Data inserted Successfully')
   con.commit()
   con.close()
   display_all()

def search(emp_id):
    con = psycopg2.connect(dbname = 'postgres',port = 5432)
    cur = con.cursor()
    query = ('''SELECT * FROM EMPLOYEE WHERE emp_id = %s;''' )
    cur.execute(query,(emp_id))
    row = cur.fetchone()
    display_search(row)
    con.commit()
    con.close()

def display_search(row):
    listBox = ListBox(frame,width =50,height=1)
    listBox.grid(row = 9,column =1)
    listBox.insert(END,row)



def display_all():
    con = psycopg2.connect(dbname = 'postgres',port = 5432)
    cur = con.cursor()
    query = ('''SELECT * FROM Employee;''' )
    cur.execute(query)
    row = cur.fetchall()

    listBox = ListBox(frame,height=8)
    listBox.grid(row = 10,column =1)

    for x in row:
        listBox.insert(END,x)

canvas = Canvas(root,height = 480,width = 900)
canvas.pack()

frame = Frame()
frame.config(background="Black")
frame.place(relx = 0,rely = 0,relwidth = 1,relheight = 1)

label = Label(frame,text = " Employee Database")
labelfont = ('times',24,'bold')
label.config(bg = 'Black',fg ='Yellow',font =labelfont)
label.grid(row=0,column=1,sticky = N)


label = Label(frame,text = 'Employee Name : ')
labelfont1 = ('times',18,font =labelfont1)
label.grid(row =1,column = 0,sticky='w')
entry_name = Entry(frame,width = 30)
entry_name.grid(row = 1,column= 1)

label = Label(frame,text = 'Department : ')
labelfont1 = ('times',font =labelfont1)
label.grid(row =2,sticky ='w')
dept_name = Entry(frame,width = 30)
dept_name.grid(row = 2,text = 'Education : ')
labelfont1 = ('times',font =labelfont1)
label.grid(row =3,sticky ='w')
education = Entry(frame,width = 30)
education.grid(row = 3,text = 'Salary : ')
labelfont1 = ('times',font =labelfont1)
label.grid(row =4,sticky ='w')
salary = Entry(frame,width = 30)
salary.grid(row = 4,column= 1)

button = Button(frame,text = 'Add information',command=lambda:         get_info(entry_name.get(),dept_name.get(),education.get(),salary.get()))
buttonfont1 = ('times',13,'bold')
button.config(bg = 'Black',font =buttonfont1)
button.grid(row = 5,text = 'Search by Emp_id : ')
labelfont1 = ('times',14,font =labelfont1)
label.grid(row = 6,sticky ='w')
id_search = Entry(frame,width = 30)
id_search.grid(row = 6,text = 'Search',command = lambda:     search(id_search.get()))
buttonfont1 = ('times',font =buttonfont1)
button.grid(row = 7,column= 1)


display_all()



root.mainloop()

请找到随附的代码以及屏幕截图:

我将删除列表框中可见的花括号,以及希望以表格形式打印出来的花括号

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

解决方法

您要在列表框中插入列表或元组而不是字符串。在传递给insert方法之前,需要将每行显式转换为字符串。否则,底层的tcl解释器将在将值转换为字符串时通过添加大括号或反斜杠来尝试保留数据的列表状结构。

考虑以下代码:

query = ('''SELECT * FROM Employee;''' )
cur.execute(query)
row = cur.fetchall()

row列表列表。对于row中的每个项目,您都有该行中每一列的值列表。

稍后,您将每一行添加到列表框中,如下所示:

for x in row:
    listbox.insert(END,x)

如前所述,x是每列数据的列表。但是,listbox.insert需要一个字符串。由于它不是字符串,因此tkinter会使用自己的逻辑将其转换为字符串,这可能会导致添加大括号。

为避免这种情况,应在调用insert之前将列表显式转换为字符串。最简单的方法是在每个元素之间添加一个空格:

listbox.insert(END," ".join(x))

如果“ x”包含字符串以外的内容,则需要先将其转换为字符串。最终版本可能如下所示:

string_data = [str(data) for data in x]
listbox.insert(END," ".join(string_data))
,

布莱恩的解释非常有用!!!但是,当我使用建议的代码时,

string_data = [str(data) for data in x]
listbox.insert(END," ".join(string_data))
我的输出是一长行。所以我添加了一个for循环,
item = [str(data) for data in backend.view()]
for x in item:
    lb.insert(END,"".join(x)) # don't include space between quotes

,看起来好多了。我还尝试了一些代码,而且效果很好,

for item in backend.view():
    lb.insert(END,"{}".format(item))

与Bryan建议的代码相同,只是我使用format代替了join。

无论如何,非常感谢!这很有帮助。